{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>language</th>\n",
       "      <th>coordinates</th>\n",
       "      <th>consonants</th>\n",
       "      <th>vowels</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Turkish</td>\n",
       "      <td>(39.8667, 32.8667)</td>\n",
       "      <td>25</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Korean</td>\n",
       "      <td>(37.5, 128.0)</td>\n",
       "      <td>21</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Tiwi</td>\n",
       "      <td>(-11.6308, 130.94899999999998)</td>\n",
       "      <td>22</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Liberia Kpelle</td>\n",
       "      <td>(6.92048, -9.96128)</td>\n",
       "      <td>22</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Tulu</td>\n",
       "      <td>(12.8114, 75.2651)</td>\n",
       "      <td>24</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         language                     coordinates  consonants  vowels\n",
       "0         Turkish              (39.8667, 32.8667)          25       8\n",
       "1          Korean                   (37.5, 128.0)          21      11\n",
       "2            Tiwi  (-11.6308, 130.94899999999998)          22       4\n",
       "3  Liberia Kpelle             (6.92048, -9.96128)          22      12\n",
       "4            Tulu              (12.8114, 75.2651)          24      13"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "import ast\n",
    "\n",
    "import pandas\n",
    "\n",
    "\n",
    "data = pandas.read_csv(\n",
    "    \"data\" + os.path.sep + \"consonants_vowels.csv\",\n",
    "    # To ensure that tuples are read as tuples\n",
    "    converters={\"coordinates\": ast.literal_eval},\n",
    ")\n",
    "\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Charts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import io\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "pie_charts_data = zip(data.consonants, data.vowels)\n",
    "\n",
    "fig = plt.figure(figsize=(0.5, 0.5))\n",
    "fig.patch.set_alpha(0)\n",
    "ax = fig.add_subplot(111)\n",
    "plots = []\n",
    "for sizes in pie_charts_data:\n",
    "    ax.pie(sizes, colors=(\"#e6194b\", \"#19e6b4\"))\n",
    "    buff = io.StringIO()\n",
    "    plt.savefig(buff, format=\"SVG\")\n",
    "    buff.seek(0)\n",
    "    svg = buff.read()\n",
    "    svg = svg.replace(\"\\n\", \"\")\n",
    "    plots.append(svg)\n",
    "    plt.cla()\n",
    "plt.clf()\n",
    "plt.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Legend"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import branca\n",
    "\n",
    "legend_html = \"\"\"\n",
    "{% macro html(this, kwargs) %}\n",
    "<div style=\"\n",
    "    position: fixed;\n",
    "    bottom: 50px;\n",
    "    left: 50px;\n",
    "    width: 250px;\n",
    "    height: 80px;\n",
    "    z-index:9999;\n",
    "    font-size:14px;\n",
    "    \">\n",
    "    <p><a style=\"color:#e6194b;font-size:150%;margin-left:20px;\">◼</a>&emsp;Consonants</p>\n",
    "    <p><a style=\"color:#19e6b4;font-size:150%;margin-left:20px;\">◼</a>&emsp;Vowels</p>\n",
    "</div>\n",
    "<div style=\"\n",
    "    position: fixed;\n",
    "    bottom: 50px;\n",
    "    left: 50px;\n",
    "    width: 150px;\n",
    "    height: 80px;\n",
    "    z-index:9998;\n",
    "    font-size:14px;\n",
    "    background-color: #ffffff;\n",
    "    filter: blur(8px);\n",
    "    -webkit-filter: blur(8px);\n",
    "    opacity: 0.7;\n",
    "    \">\n",
    "</div>\n",
    "{% endmacro %}\n",
    "\"\"\"\n",
    "\n",
    "legend = branca.element.MacroElement()\n",
    "legend._template = branca.element.Template(legend_html)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Map"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHN0eWxlPmh0bWwsIGJvZHkge3dpZHRoOiAxMDAlO2hlaWdodDogMTAwJTttYXJnaW46IDA7cGFkZGluZzogMDt9PC9zdHlsZT4KICAgIDxzdHlsZT4jbWFwIHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2xlZnQ6MDt9PC9zdHlsZT4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMS4xMi40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvTGVhZmxldC5hd2Vzb21lLW1hcmtlcnMvMi4wLjIvbGVhZmxldC5hd2Vzb21lLW1hcmtlcnMuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2xlYWZsZXRAMS42LjAvZGlzdC9sZWFmbGV0LmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4yLjAvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vZm9udC1hd2Vzb21lLzQuNi4zL2Nzcy9mb250LWF3ZXNvbWUubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL3B5dGhvbi12aXN1YWxpemF0aW9uL2ZvbGl1bS9mb2xpdW0vdGVtcGxhdGVzL2xlYWZsZXQuYXdlc29tZS5yb3RhdGUubWluLmNzcyIvPgogICAgCiAgICAgICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsCiAgICAgICAgICAgICAgICBpbml0aWFsLXNjYWxlPTEuMCwgbWF4aW11bS1zY2FsZT0xLjAsIHVzZXItc2NhbGFibGU9bm8iIC8+CiAgICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgICAgICNtYXBfMDgwM2RmNzQwM2JjNGI5ZTg2MzExYWY2YWY0NmZiMjkgewogICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwLjAlOwogICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAuMCU7CiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLjAlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICA8L3N0eWxlPgogICAgICAgIAo8L2hlYWQ+Cjxib2R5PiAgICAKICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb2xpdW0tbWFwIiBpZD0ibWFwXzA4MDNkZjc0MDNiYzRiOWU4NjMxMWFmNmFmNDZmYjI5IiA+PC9kaXY+CiAgICAgICAgCiAgICAKPGRpdiBzdHlsZT0iCiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICBib3R0b206IDUwcHg7CiAgICBsZWZ0OiA1MHB4OwogICAgd2lkdGg6IDI1MHB4OwogICAgaGVpZ2h0OiA4MHB4OwogICAgei1pbmRleDo5OTk5OwogICAgZm9udC1zaXplOjE0cHg7CiAgICAiPgogICAgPHA+PGEgc3R5bGU9ImNvbG9yOiNlNjE5NGI7Zm9udC1zaXplOjE1MCU7bWFyZ2luLWxlZnQ6MjBweDsiPuKXvDwvYT4mZW1zcDtDb25zb25hbnRzPC9wPgogICAgPHA+PGEgc3R5bGU9ImNvbG9yOiMxOWU2YjQ7Zm9udC1zaXplOjE1MCU7bWFyZ2luLWxlZnQ6MjBweDsiPuKXvDwvYT4mZW1zcDtWb3dlbHM8L3A+CjwvZGl2Pgo8ZGl2IHN0eWxlPSIKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIGJvdHRvbTogNTBweDsKICAgIGxlZnQ6IDUwcHg7CiAgICB3aWR0aDogMTUwcHg7CiAgICBoZWlnaHQ6IDgwcHg7CiAgICB6LWluZGV4Ojk5OTg7CiAgICBmb250LXNpemU6MTRweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7CiAgICBmaWx0ZXI6IGJsdXIoOHB4KTsKICAgIC13ZWJraXQtZmlsdGVyOiBibHVyKDhweCk7CiAgICBvcGFjaXR5OiAwLjc7CiAgICAiPgo8L2Rpdj4KPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFwXzA4MDNkZjc0MDNiYzRiOWU4NjMxMWFmNmFmNDZmYjI5ID0gTC5tYXAoCiAgICAgICAgICAgICAgICAibWFwXzA4MDNkZjc0MDNiYzRiOWU4NjMxMWFmNmFmNDZmYjI5IiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IFswLjAsIDAuMF0sCiAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICAgICAgICAgICAgICB6b29tOiAyLAogICAgICAgICAgICAgICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIHByZWZlckNhbnZhczogZmFsc2UsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAKCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfMjdmYjhiMDliODMwNGY4MzkxYjQxNjNmYTg3ZTE1OTYgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICJodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZyIsCiAgICAgICAgICAgICAgICB7ImF0dHJpYnV0aW9uIjogIkRhdGEgYnkgXHUwMDI2Y29weTsgXHUwMDNjYSBocmVmPVwiaHR0cDovL29wZW5zdHJlZXRtYXAub3JnXCJcdTAwM2VPcGVuU3RyZWV0TWFwXHUwMDNjL2FcdTAwM2UsIHVuZGVyIFx1MDAzY2EgaHJlZj1cImh0dHA6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCJcdTAwM2VPRGJMXHUwMDNjL2FcdTAwM2UuIiwgImRldGVjdFJldGluYSI6IGZhbHNlLCAibWF4TmF0aXZlWm9vbSI6IDE4LCAibWF4Wm9vbSI6IDE4LCAibWluWm9vbSI6IDAsICJub1dyYXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLCAic3ViZG9tYWlucyI6ICJhYmMiLCAidG1zIjogZmFsc2V9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDNkZjc0MDNiYzRiOWU4NjMxMWFmNmFmNDZmYjI5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2I1NjdhOTMwMWM1MzQzZTA4MzM3MzJkNzk0YTFjZmU3ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbMzkuODY2NywgMzIuODY2N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wODAzZGY3NDAzYmM0YjllODYzMTFhZjZhZjQ2ZmIyOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzkwMTFmNTc0Mzg0ZjRjY2RhZDlhNDJhYTlkNWU0YTgxID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY21ldGFkYXRhXHUwMDNlICBcdTAwM2NyZGY6UkRGIHhtbG5zOmNjPVwiaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIlx1MDAzZSAgIFx1MDAzY2NjOldvcmtcdTAwM2UgICAgXHUwMDNjZGM6dHlwZSByZGY6cmVzb3VyY2U9XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZVwiL1x1MDAzZSAgICBcdTAwM2NkYzpkYXRlXHUwMDNlMjAyMC0xMS0xNlQxNTowMToyNy4zMDY3MzVcdTAwM2MvZGM6ZGF0ZVx1MDAzZSAgICBcdTAwM2NkYzpmb3JtYXRcdTAwM2VpbWFnZS9zdmcreG1sXHUwMDNjL2RjOmZvcm1hdFx1MDAzZSAgICBcdTAwM2NkYzpjcmVhdG9yXHUwMDNlICAgICBcdTAwM2NjYzpBZ2VudFx1MDAzZSAgICAgIFx1MDAzY2RjOnRpdGxlXHUwMDNlTWF0cGxvdGxpYiB2My4zLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvXHUwMDNjL2RjOnRpdGxlXHUwMDNlICAgICBcdTAwM2MvY2M6QWdlbnRcdTAwM2UgICAgXHUwMDNjL2RjOmNyZWF0b3JcdTAwM2UgICBcdTAwM2MvY2M6V29ya1x1MDAzZSAgXHUwMDNjL3JkZjpSREZcdTAwM2UgXHUwMDNjL21ldGFkYXRhXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9XHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjMyMiAxNy45MSBDIDI5LjMyMiAxNi44Mjk4NzggMjkuMTYxMDM3IDE1Ljc1NTc2MiAyOC44NDQ0MiAxNC43MjMwODggQyAyOC41Mjc4MDQgMTMuNjkwNDEzIDI4LjA1OTA1NSAxMi43MTA2NjMgMjcuNDUzNjM5IDExLjgxNjE2MSBDIDI2Ljg0ODIyMyAxMC45MjE2NiAyNi4xMTI4NzEgMTAuMTIyMzUyIDI1LjI3MTg0MyA5LjQ0NDYwOSBDIDI0LjQzMDgxNiA4Ljc2Njg2NiAyMy40OTM0NjUgOC4yMTgyMjUgMjIuNDkwNzE0IDcuODE2Nzg0IEMgMjEuNDg3OTY0IDcuNDE1MzQzIDIwLjQzMDk2NSA3LjE2NTU2OCAxOS4zNTQ1ODkgNy4wNzU2OTggQyAxOC4yNzgyMTIgNi45ODU4MjggMTcuMTk0NDI4IDcuMDU2ODYzIDE2LjEzODk5IDcuMjg2NDU5IEMgMTUuMDgzNTUzIDcuNTE2MDU2IDE0LjA2ODE5OSA3LjkwMTY2IDEzLjEyNjQyNiA4LjQzMDU1MiBDIDEyLjE4NDY1MyA4Ljk1OTQ0MyAxMS4zMjY5MzMgOS42MjU3NCAxMC41ODE1NjQgMTAuNDA3NDYxIEMgOS44MzYxOTQgMTEuMTg5MTgyIDkuMjExNDY0IDEyLjA3NzYzMyA4LjcyNzk4MyAxMy4wNDM1MDUgQyA4LjI0NDUwMiAxNC4wMDkzNzcgNy45MDc2NDcgMTUuMDQxOTI5IDcuNzI4NTMgMTYuMTA3MDk2IEMgNy41NDk0MTMgMTcuMTcyMjYyIDcuNTMwMDI3IDE4LjI1ODE5OSA3LjY3MTAxMSAxOS4zMjkwOCBDIDcuODExOTk2IDIwLjM5OTk2MSA4LjExMTc4MiAyMS40NDM4NzkgOC41NjA0ODEgMjIuNDI2MzkyIEMgOS4wMDkxNzkgMjMuNDA4OTA1IDkuNjAxODAxIDI0LjMxOTA4OSAxMC4zMTg3OTQgMjUuMTI2OTE1IEMgMTEuMDM1Nzg3IDI1LjkzNDc0MiAxMS44NjkxNzggMjYuNjMxMjI5IDEyLjc5MTQ3NCAyNy4xOTMzOTcgQyAxMy43MTM3NjkgMjcuNzU1NTY2IDE0LjcxNDcxMyAyOC4xNzcxNjUgMTUuNzYxMjgzIDI4LjQ0NDI4NiBDIDE2LjgwNzg1MyAyOC43MTE0MDcgMTcuODg4NDEyIDI4LjgyMTA4IDE4Ljk2NzMxIDI4Ljc2OTY4NiBMIDE4LjQ1IDE3LjkxIEwgMjkuMzIyIDE3LjkxIHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAxOC45NjczMSAyOC43Njk2ODYgQyAyMS43NTcwNzYgMjguNjM2NzkzIDI0LjM5MTA5NCAyNy40MzM4NzcgMjYuMzE4NDM2IDI1LjQxMjUzOSBDIDI4LjI0NTc3OCAyMy4zOTEyMDEgMjkuMzIyIDIwLjcwMjkyOSAyOS4zMjIgMTcuOTEgTCAxOC40NSAxNy45MSBMIDE4Ljk2NzMxIDI4Ljc2OTY4NiB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyX2I1NjdhOTMwMWM1MzQzZTA4MzM3MzJkNzk0YTFjZmU3LnNldEljb24oZGl2X2ljb25fOTAxMWY1NzQzODRmNGNjZGFkOWE0MmFhOWQ1ZTRhODEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2ZhMWEzOTE4NWIwOTRjYzFhZTVlMzk3NTg4OGM3YWUyID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mZDBlZjZjMzYyZmE0MThkYjBmOTZiNTgyYWUzNjE0NyA9ICQoYDxkaXYgaWQ9Imh0bWxfZmQwZWY2YzM2MmZhNDE4ZGIwZjk2YjU4MmFlMzYxNDciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDI1PGJyPiBWb3dlbHM6IDg8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfZmExYTM5MTg1YjA5NGNjMWFlNWUzOTc1ODg4YzdhZTIuc2V0Q29udGVudChodG1sX2ZkMGVmNmMzNjJmYTQxOGRiMGY5NmI1ODJhZTM2MTQ3KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2I1NjdhOTMwMWM1MzQzZTA4MzM3MzJkNzk0YTFjZmU3LmJpbmRQb3B1cChwb3B1cF9mYTFhMzkxODViMDk0Y2MxYWU1ZTM5NzU4ODhjN2FlMikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl9hMTk0NTA0ZjdlNjc0YjYyYmQxYmJkYzljMDkyOTA2NyA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM3LjUsIDEyOC4wXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDNkZjc0MDNiYzRiOWU4NjMxMWFmNmFmNDZmYjI5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fMzM0Njc2Njk0ZGNhNGY0Y2I0ODRkZTRmN2U4NmMxNWQgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjbWV0YWRhdGFcdTAwM2UgIFx1MDAzY3JkZjpSREYgeG1sbnM6Y2M9XCJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNcIiB4bWxuczpkYz1cImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIgeG1sbnM6cmRmPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiXHUwMDNlICAgXHUwMDNjY2M6V29ya1x1MDAzZSAgICBcdTAwM2NkYzp0eXBlIHJkZjpyZXNvdXJjZT1cImh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlXCIvXHUwMDNlICAgIFx1MDAzY2RjOmRhdGVcdTAwM2UyMDIwLTExLTE2VDE1OjAxOjI3LjM1NzYzOVx1MDAzYy9kYzpkYXRlXHUwMDNlICAgIFx1MDAzY2RjOmZvcm1hdFx1MDAzZWltYWdlL3N2Zyt4bWxcdTAwM2MvZGM6Zm9ybWF0XHUwMDNlICAgIFx1MDAzY2RjOmNyZWF0b3JcdTAwM2UgICAgIFx1MDAzY2NjOkFnZW50XHUwMDNlICAgICAgXHUwMDNjZGM6dGl0bGVcdTAwM2VNYXRwbG90bGliIHYzLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy9cdTAwM2MvZGM6dGl0bGVcdTAwM2UgICAgIFx1MDAzYy9jYzpBZ2VudFx1MDAzZSAgICBcdTAwM2MvZGM6Y3JlYXRvclx1MDAzZSAgIFx1MDAzYy9jYzpXb3JrXHUwMDNlICBcdTAwM2MvcmRmOlJERlx1MDAzZSBcdTAwM2MvbWV0YWRhdGFcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO31cdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuMzIyIDE3LjkxIEMgMjkuMzIyIDE2LjAzMTg1MSAyOC44MzUzMjIgMTQuMTg1MzY0IDI3LjkwOTU4NiAxMi41NTEyMTEgQyAyNi45ODM4NSAxMC45MTcwNTggMjUuNjUwMjY3IDkuNTUwMzM2IDI0LjAzOTMyNSA4LjU4NDc3NSBDIDIyLjQyODM4MyA3LjYxOTIxMyAyMC41OTQzOTUgNy4wODczNjcgMTguNzE2ODEyIDcuMDQxMjc0IEMgMTYuODM5MjI5IDYuOTk1MTgyIDE0Ljk4MTM1NCA3LjQzNjM5OSAxMy4zMjQ5NzUgOC4zMjE3NTIgQyAxMS42Njg1OTUgOS4yMDcxMDUgMTAuMjY5NTU3IDEwLjUwNjc0NSA5LjI2NDc1MiAxMi4wOTM1MDYgQyA4LjI1OTk0NyAxMy42ODAyNjcgNy42ODMyNTIgMTUuNTAwNjUgNy41OTEwOTYgMTcuMzc2NTM2IEMgNy40OTg5MzkgMTkuMjUyNDIzIDcuODk0NDI4IDIxLjEyMDU2NiA4LjczODg2NSAyMi43OTgxNzQgQyA5LjU4MzMwMiAyNC40NzU3ODMgMTAuODQ4MjE3IDI1LjkwNjI5NCAxMi40MDk4NCAyNi45NDk3MzggTCAxOC40NSAxNy45MSBMIDI5LjMyMiAxNy45MSB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMTIuNDA5ODQgMjYuOTQ5NzM4IEMgMTQuMDQ2Njk0IDI4LjA0MzQ0OCAxNS45NTAyODEgMjguNjcyMzA4IDE3LjkxNjUzNiAyOC43Njg5MDQgQyAxOS44ODI3OTIgMjguODY1NSAyMS44Mzg4NTEgMjguNDI2MjUyIDIzLjU3NTAyNSAyNy40OTgyNDggQyAyNS4zMTExOTkgMjYuNTcwMjQ0IDI2Ljc2MzE0OSAyNS4xODc4NzMgMjcuNzc1MjI1IDIzLjQ5OTMyNSBDIDI4Ljc4NzMwMiAyMS44MTA3NzcgMjkuMzIyIDE5Ljg3ODYyNyAyOS4zMjIgMTcuOTEgTCAxOC40NSAxNy45MSBMIDEyLjQwOTg0IDI2Ljk0OTczOCB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyX2ExOTQ1MDRmN2U2NzRiNjJiZDFiYmRjOWMwOTI5MDY3LnNldEljb24oZGl2X2ljb25fMzM0Njc2Njk0ZGNhNGY0Y2I0ODRkZTRmN2U4NmMxNWQpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzM1MzczYWZmOTAxMTRjYmJhMzIwYzRkMjQ2MDYxOWYxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9mNDEzMjNiNzNjYTg0NTk4YjM3MmQzMGNjZDcyNDY0MiA9ICQoYDxkaXYgaWQ9Imh0bWxfZjQxMzIzYjczY2E4NDU5OGIzNzJkMzBjY2Q3MjQ2NDIiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDIxPGJyPiBWb3dlbHM6IDExPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzM1MzczYWZmOTAxMTRjYmJhMzIwYzRkMjQ2MDYxOWYxLnNldENvbnRlbnQoaHRtbF9mNDEzMjNiNzNjYTg0NTk4YjM3MmQzMGNjZDcyNDY0Mik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9hMTk0NTA0ZjdlNjc0YjYyYmQxYmJkYzljMDkyOTA2Ny5iaW5kUG9wdXAocG9wdXBfMzUzNzNhZmY5MDExNGNiYmEzMjBjNGQyNDYwNjE5ZjEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMWMyYjljZjc4MTM1NDIyMDk2ZmE5ODk5ZDI1Yzk2MjcgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstMTEuNjMwOCwgMTMwLjk0ODk5OTk5OTk5OTk4XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDNkZjc0MDNiYzRiOWU4NjMxMWFmNmFmNDZmYjI5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fYTVhNTdmNThlZWIwNGUwOWI5ODE3ODUwZmVkYjEyYjMgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjbWV0YWRhdGFcdTAwM2UgIFx1MDAzY3JkZjpSREYgeG1sbnM6Y2M9XCJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNcIiB4bWxuczpkYz1cImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIgeG1sbnM6cmRmPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiXHUwMDNlICAgXHUwMDNjY2M6V29ya1x1MDAzZSAgICBcdTAwM2NkYzp0eXBlIHJkZjpyZXNvdXJjZT1cImh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlXCIvXHUwMDNlICAgIFx1MDAzY2RjOmRhdGVcdTAwM2UyMDIwLTExLTE2VDE1OjAxOjI3LjM5ODkwNlx1MDAzYy9kYzpkYXRlXHUwMDNlICAgIFx1MDAzY2RjOmZvcm1hdFx1MDAzZWltYWdlL3N2Zyt4bWxcdTAwM2MvZGM6Zm9ybWF0XHUwMDNlICAgIFx1MDAzY2RjOmNyZWF0b3JcdTAwM2UgICAgIFx1MDAzY2NjOkFnZW50XHUwMDNlICAgICAgXHUwMDNjZGM6dGl0bGVcdTAwM2VNYXRwbG90bGliIHYzLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy9cdTAwM2MvZGM6dGl0bGVcdTAwM2UgICAgIFx1MDAzYy9jYzpBZ2VudFx1MDAzZSAgICBcdTAwM2MvZGM6Y3JlYXRvclx1MDAzZSAgIFx1MDAzYy9jYzpXb3JrXHUwMDNlICBcdTAwM2MvcmRmOlJERlx1MDAzZSBcdTAwM2MvbWV0YWRhdGFcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO31cdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuMzIyIDE3LjkxIEMgMjkuMzIyIDE2LjcwMzA0IDI5LjEyMTAxMyAxNS41MDQ0NjIgMjguNzI3MyAxNC4zNjM1MjMgQyAyOC4zMzM1ODYgMTMuMjIyNTg0IDI3Ljc1MjYxNCAxMi4xNTUxMzEgMjcuMDA4MjU5IDExLjIwNTAzMiBDIDI2LjI2MzkwNCAxMC4yNTQ5MzQgMjUuMzY2NTA1IDkuNDM1Mzg1IDI0LjM1Mjk0MSA4Ljc4MDA2NyBDIDIzLjMzOTM3OCA4LjEyNDc1IDIyLjIyMzcyOCA3LjY0Mjc2NSAyMS4wNTE4NCA3LjM1MzkyMSBDIDE5Ljg3OTk1MiA3LjA2NTA3NiAxOC42NjgxMDMgNi45NzMzODQgMTcuNDY2MDk2IDcuMDgyNjEzIEMgMTYuMjY0MDg5IDcuMTkxODQxIDE1LjA4ODYxOCA3LjUwMDQ3MyAxMy45ODc5OTIgNy45OTU4MjUgQyAxMi44ODczNjUgOC40OTExNzcgMTEuODc2ODcgOS4xNjYzNjggMTAuOTk4MDMzIDkuOTkzNjUyIEMgMTAuMTE5MTk2IDEwLjgyMDkzNSA5LjM4NDIyNCAxMS43ODg4MiA4LjgyMzMyMiAxMi44NTc1MyBDIDguMjYyNDIgMTMuOTI2MjQgNy44ODMzNzggMTUuMDgwOTMxIDcuNzAxNzczIDE2LjI3NDE1IEMgNy41MjAxNjkgMTcuNDY3MzY5IDcuNTM4NTI0IDE4LjY4MjU0MyA3Ljc1NjA4NCAxOS44Njk3MzMgQyA3Ljk3MzY0NSAyMS4wNTY5MjMgOC4zODczODkgMjIuMTk5NjM5IDguOTgwMzE0IDIzLjI1MDkyMSBDIDkuNTczMjM5IDI0LjMwMjIwMiAxMC4zMzcxMDggMjUuMjQ3NDQ3IDExLjI0MDUzMSAyNi4wNDc4MDkgQyAxMi4xNDM5NTMgMjYuODQ4MTcyIDEzLjE3NDM4MSAyNy40OTI1MzUgMTQuMjg5NDY2IDI3Ljk1NDQxOCBDIDE1LjQwNDU1MiAyOC40MTYzMDIgMTYuNTg4ODA4IDI4LjY4OTI5IDE3Ljc5MzU2NiAyOC43NjIxNjUgQyAxOC45OTgzMjMgMjguODM1MDM5IDIwLjIwNjg1IDI4LjcwNjc4NyAyMS4zNjk0NzkgMjguMzgyNjggQyAyMi41MzIxMDggMjguMDU4NTczIDIzLjYzMjY5MiAyNy41NDMxMTIgMjQuNjI2IDI2Ljg1NzQ4IEwgMTguNDUgMTcuOTEgTCAyOS4zMjIgMTcuOTEgelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI0LjYyNiAyNi44NTc0OCBDIDI2LjA3NDQ4MyAyNS44NTc2NjQgMjcuMjU4NzQ4IDI0LjUyMDkwNiAyOC4wNzY2NzggMjIuOTYyNDcgQyAyOC44OTQ2MDkgMjEuNDA0MDMzIDI5LjMyMiAxOS42NzAwMzcgMjkuMzIyIDE3LjkwOTk5OSBMIDE4LjQ1IDE3LjkxIEwgMjQuNjI2IDI2Ljg1NzQ4IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfMWMyYjljZjc4MTM1NDIyMDk2ZmE5ODk5ZDI1Yzk2Mjcuc2V0SWNvbihkaXZfaWNvbl9hNWE1N2Y1OGVlYjA0ZTA5Yjk4MTc4NTBmZWRiMTJiMyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfOGIwOWE0MDAwMWNmNDgyODg4N2I0NjQxZTU3ZGU4ZGMgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzA0N2NhZTY0N2I3YTRkODBiYmYzOGE1YjFkYTYxYTdlID0gJChgPGRpdiBpZD0iaHRtbF8wNDdjYWU2NDdiN2E0ZDgwYmJmMzhhNWIxZGE2MWE3ZSIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMjI8YnI+IFZvd2VsczogNDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84YjA5YTQwMDAxY2Y0ODI4ODg3YjQ2NDFlNTdkZThkYy5zZXRDb250ZW50KGh0bWxfMDQ3Y2FlNjQ3YjdhNGQ4MGJiZjM4YTViMWRhNjFhN2UpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMWMyYjljZjc4MTM1NDIyMDk2ZmE5ODk5ZDI1Yzk2MjcuYmluZFBvcHVwKHBvcHVwXzhiMDlhNDAwMDFjZjQ4Mjg4ODdiNDY0MWU1N2RlOGRjKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2Y4YjY0MDMxY2IxODRiZDU5ODVlZTFkMzA1MDNmZmQ1ID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNi45MjA0OCwgLTkuOTYxMjhdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwM2RmNzQwM2JjNGI5ZTg2MzExYWY2YWY0NmZiMjkpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl9iMGMyNzY4MGQwNjU0MzEwYTA0OTk1ZGRkMjg3NWQyZSA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NtZXRhZGF0YVx1MDAzZSAgXHUwMDNjcmRmOlJERiB4bWxuczpjYz1cImh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI1wiIHhtbG5zOmRjPVwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIiB4bWxuczpyZGY9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCJcdTAwM2UgICBcdTAwM2NjYzpXb3JrXHUwMDNlICAgIFx1MDAzY2RjOnR5cGUgcmRmOnJlc291cmNlPVwiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2VcIi9cdTAwM2UgICAgXHUwMDNjZGM6ZGF0ZVx1MDAzZTIwMjAtMTEtMTZUMTU6MDE6MjcuNDQ2NTI2XHUwMDNjL2RjOmRhdGVcdTAwM2UgICAgXHUwMDNjZGM6Zm9ybWF0XHUwMDNlaW1hZ2Uvc3ZnK3htbFx1MDAzYy9kYzpmb3JtYXRcdTAwM2UgICAgXHUwMDNjZGM6Y3JlYXRvclx1MDAzZSAgICAgXHUwMDNjY2M6QWdlbnRcdTAwM2UgICAgICBcdTAwM2NkYzp0aXRsZVx1MDAzZU1hdHBsb3RsaWIgdjMuMy4zLCBodHRwczovL21hdHBsb3RsaWIub3JnL1x1MDAzYy9kYzp0aXRsZVx1MDAzZSAgICAgXHUwMDNjL2NjOkFnZW50XHUwMDNlICAgIFx1MDAzYy9kYzpjcmVhdG9yXHUwMDNlICAgXHUwMDNjL2NjOldvcmtcdTAwM2UgIFx1MDAzYy9yZGY6UkRGXHUwMDNlIFx1MDAzYy9tZXRhZGF0YVx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fVx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS4zMjIgMTcuOTEgQyAyOS4zMjIgMTYuMDU4NDM2IDI4Ljg0OTAwMiAxNC4yMzcyMDQgMjcuOTQ4MDIzIDEyLjYxOTYzNiBDIDI3LjA0NzA0MyAxMS4wMDIwNjggMjUuNzQ3NjAyIDkuNjQxMTYyIDI0LjE3MzM3IDguNjY2NDM5IEMgMjIuNTk5MTM5IDcuNjkxNzE2IDIwLjgwMTY5NCA3LjEzNTExMiAxOC45NTIxMDYgNy4wNDk2MDEgQyAxNy4xMDI1MTggNi45NjQwODkgMTUuMjYxMzg0IDcuMzUyNDcyIDEzLjYwMzkzMiA4LjE3Nzc4NSBDIDExLjk0NjQ4IDkuMDAzMDk4IDEwLjUyNzAxMyAxMC4yMzgzMDIgOS40ODA2MjcgMTEuNzY1ODM4IEMgOC40MzQyNDEgMTMuMjkzMzczIDcuNzk1MjE5IDE1LjA2MzE5NCA3LjYyNDM3OCAxNi45MDY4NTkgQyA3LjQ1MzUzNyAxOC43NTA1MjUgNy43NTY0NzYgMjAuNjA3NjMxIDguNTA0MzYyIDIyLjMwMTQzIEMgOS4yNTIyNDcgMjMuOTk1MjMgMTAuNDIwNTc3IDI1LjQ3MDIyOCAxMS44OTgxNTcgMjYuNTg2MDQ0IEwgMTguNDUgMTcuOTEgTCAyOS4zMjIgMTcuOTEgelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDExLjg5ODE1NyAyNi41ODYwNDQgQyAxMy41MTE2ODEgMjcuODA0NTIxIDE1LjQzMzU2OSAyOC41NDkwNjQgMTcuNDQ2ODYgMjguNzM1NjIyIEMgMTkuNDYwMTUxIDI4LjkyMjE4MSAyMS40ODYxMjQgMjguNTQzNDYgMjMuMjk2MDY5IDI3LjY0MjIxNSBDIDI1LjEwNjAxNCAyNi43NDA5NjkgMjYuNjI5MTYgMjUuMzUyNDM3IDI3LjY5MzU2MiAyMy42MzMzNjkgQyAyOC43NTc5NjMgMjEuOTE0MzAxIDI5LjMyMiAxOS45MzE5MTQgMjkuMzIyIDE3LjkwOTk5OCBMIDE4LjQ1IDE3LjkxIEwgMTEuODk4MTU3IDI2LjU4NjA0NCB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyX2Y4YjY0MDMxY2IxODRiZDU5ODVlZTFkMzA1MDNmZmQ1LnNldEljb24oZGl2X2ljb25fYjBjMjc2ODBkMDY1NDMxMGEwNDk5NWRkZDI4NzVkMmUpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzU4ZWNmY2Q3MzFkMTQ0ZjFhMmNiY2FkODhmMmZlY2I4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83Zjg5Y2M5MjJmZDg0MzQ0YmQzNGFkZWFkMWFmODBhOSA9ICQoYDxkaXYgaWQ9Imh0bWxfN2Y4OWNjOTIyZmQ4NDM0NGJkMzRhZGVhZDFhZjgwYTkiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDIyPGJyPiBWb3dlbHM6IDEyPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzU4ZWNmY2Q3MzFkMTQ0ZjFhMmNiY2FkODhmMmZlY2I4LnNldENvbnRlbnQoaHRtbF83Zjg5Y2M5MjJmZDg0MzQ0YmQzNGFkZWFkMWFmODBhOSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9mOGI2NDAzMWNiMTg0YmQ1OTg1ZWUxZDMwNTAzZmZkNS5iaW5kUG9wdXAocG9wdXBfNThlY2ZjZDczMWQxNDRmMWEyY2JjYWQ4OGYyZmVjYjgpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZTMzNzA4ZTI3NGFiNDA0MThiMGUwNWQ5MThjYmE5ZTQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMi44MTE0LCA3NS4yNjUxXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDNkZjc0MDNiYzRiOWU4NjMxMWFmNmFmNDZmYjI5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fZTUyNWZlZWM1MDlmNDIxZmJiMGQxYTY5MDNhZmU3Y2EgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjbWV0YWRhdGFcdTAwM2UgIFx1MDAzY3JkZjpSREYgeG1sbnM6Y2M9XCJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNcIiB4bWxuczpkYz1cImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIgeG1sbnM6cmRmPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiXHUwMDNlICAgXHUwMDNjY2M6V29ya1x1MDAzZSAgICBcdTAwM2NkYzp0eXBlIHJkZjpyZXNvdXJjZT1cImh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlXCIvXHUwMDNlICAgIFx1MDAzY2RjOmRhdGVcdTAwM2UyMDIwLTExLTE2VDE1OjAxOjI3LjQ5NjA4Mlx1MDAzYy9kYzpkYXRlXHUwMDNlICAgIFx1MDAzY2RjOmZvcm1hdFx1MDAzZWltYWdlL3N2Zyt4bWxcdTAwM2MvZGM6Zm9ybWF0XHUwMDNlICAgIFx1MDAzY2RjOmNyZWF0b3JcdTAwM2UgICAgIFx1MDAzY2NjOkFnZW50XHUwMDNlICAgICAgXHUwMDNjZGM6dGl0bGVcdTAwM2VNYXRwbG90bGliIHYzLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy9cdTAwM2MvZGM6dGl0bGVcdTAwM2UgICAgIFx1MDAzYy9jYzpBZ2VudFx1MDAzZSAgICBcdTAwM2MvZGM6Y3JlYXRvclx1MDAzZSAgIFx1MDAzYy9jYzpXb3JrXHUwMDNlICBcdTAwM2MvcmRmOlJERlx1MDAzZSBcdTAwM2MvbWV0YWRhdGFcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO31cdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuMzIyIDE3LjkxIEMgMjkuMzIyIDE2LjA1MzgzOCAyOC44NDY2NSAxNC4yMjgyMzYgMjcuOTQxNDEgMTIuNjA3NzgxIEMgMjcuMDM2MTY5IDEwLjk4NzMyNiAyNS43MzA4NDUgOS42MjUzNzUgMjQuMTUwMjY5IDguNjUyMTc1IEMgMjIuNTY5Njk0IDcuNjc4OTc2IDIwLjc2NTkxMSA3LjEyNjU3NCAxOC45MTE0MjIgNy4wNDc3OTYgQyAxNy4wNTY5MzIgNi45NjkwMTggMTUuMjEyODAxIDcuMzY2NDU5IDEzLjU1NTM4NiA4LjIwMjExIEMgMTEuODk3OTcxIDkuMDM3NzYgMTAuNDgxODQ4IDEwLjI4NDEwNSA5LjQ0MjQ0NCAxMS44MjE5NTMgQyA4LjQwMzA0IDEzLjM1OTgwMSA3Ljc3NDU4IDE1LjEzODUxNCA3LjYxNzE2NyAxNi45ODc5ODkgQyA3LjQ1OTc1MyAxOC44Mzc0NjMgNy43Nzg1NjggMjAuNjk2ODAxIDguNTQzMTIzIDIyLjM4ODE4OSBDIDkuMzA3Njc4IDI0LjA3OTU3NiAxMC40OTI3OTggMjUuNTQ3MzIgMTEuOTg1MTQ3IDI2LjY1MTA1NiBMIDE4LjQ1IDE3LjkxIEwgMjkuMzIyIDE3LjkxIHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAxMS45ODUxNDcgMjYuNjUxMDU2IEMgMTMuNjAzMzQ3IDI3Ljg0Nzg3MSAxNS41MjI1NDQgMjguNTcyMTQ1IDE3LjUyNzk4OCAyOC43NDI4MzMgQyAxOS41MzM0MzIgMjguOTEzNTIyIDIxLjU0NzQyNiAyOC41MjQwMTMgMjMuMzQ0NjEzIDI3LjYxNzg5MSBDIDI1LjE0MTgwMSAyNi43MTE3NjggMjYuNjUyNTUzIDI1LjMyNDEzOSAyNy43MDc4MjQgMjMuNjEwMjcxIEMgMjguNzYzMDk1IDIxLjg5NjQwMiAyOS4zMjIgMTkuOTIyNjk3IDI5LjMyMiAxNy45MTAwMDIgTCAxOC40NSAxNy45MSBMIDExLjk4NTE0NyAyNi42NTEwNTYgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl9lMzM3MDhlMjc0YWI0MDQxOGIwZTA1ZDkxOGNiYTllNC5zZXRJY29uKGRpdl9pY29uX2U1MjVmZWVjNTA5ZjQyMWZiYjBkMWE2OTAzYWZlN2NhKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF80NDlkYTQ3MDk1NTI0ZWQxODM5MDRmNzU2MDM5NGE4ZSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfMWQzNzE1ZGUwZmUzNGJiNTgwNDk0NmQwYTk4NGIxYjAgPSAkKGA8ZGl2IGlkPSJodG1sXzFkMzcxNWRlMGZlMzRiYjU4MDQ5NDZkMGE5ODRiMWIwIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAyNDxicj4gVm93ZWxzOiAxMzwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF80NDlkYTQ3MDk1NTI0ZWQxODM5MDRmNzU2MDM5NGE4ZS5zZXRDb250ZW50KGh0bWxfMWQzNzE1ZGUwZmUzNGJiNTgwNDk0NmQwYTk4NGIxYjApOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfZTMzNzA4ZTI3NGFiNDA0MThiMGUwNWQ5MThjYmE5ZTQuYmluZFBvcHVwKHBvcHVwXzQ0OWRhNDcwOTU1MjRlZDE4MzkwNGY3NTYwMzk0YThlKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2UxNDk4ODUzZTQzYzQ5ODdiYTEwNmIyMGEyNTFjOGQzID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbLTM4LjczOTIsIC03MS4yNzddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwM2RmNzQwM2JjNGI5ZTg2MzExYWY2YWY0NmZiMjkpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl8yYjZjZGE3MDFiNmU0MmI3ODdlY2QyNzZkYzlmOWFhYyA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NtZXRhZGF0YVx1MDAzZSAgXHUwMDNjcmRmOlJERiB4bWxuczpjYz1cImh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI1wiIHhtbG5zOmRjPVwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIiB4bWxuczpyZGY9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCJcdTAwM2UgICBcdTAwM2NjYzpXb3JrXHUwMDNlICAgIFx1MDAzY2RjOnR5cGUgcmRmOnJlc291cmNlPVwiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2VcIi9cdTAwM2UgICAgXHUwMDNjZGM6ZGF0ZVx1MDAzZTIwMjAtMTEtMTZUMTU6MDE6MjcuNTM0MTQ4XHUwMDNjL2RjOmRhdGVcdTAwM2UgICAgXHUwMDNjZGM6Zm9ybWF0XHUwMDNlaW1hZ2Uvc3ZnK3htbFx1MDAzYy9kYzpmb3JtYXRcdTAwM2UgICAgXHUwMDNjZGM6Y3JlYXRvclx1MDAzZSAgICAgXHUwMDNjY2M6QWdlbnRcdTAwM2UgICAgICBcdTAwM2NkYzp0aXRsZVx1MDAzZU1hdHBsb3RsaWIgdjMuMy4zLCBodHRwczovL21hdHBsb3RsaWIub3JnL1x1MDAzYy9kYzp0aXRsZVx1MDAzZSAgICAgXHUwMDNjL2NjOkFnZW50XHUwMDNlICAgIFx1MDAzYy9kYzpjcmVhdG9yXHUwMDNlICAgXHUwMDNjL2NjOldvcmtcdTAwM2UgIFx1MDAzYy9yZGY6UkRGXHUwMDNlIFx1MDAzYy9tZXRhZGF0YVx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fVx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS4zMjIgMTcuOTEgQyAyOS4zMjIgMTYuODEzMTk5IDI5LjE1NjAyNyAxNS43MjI2ODYgMjguODI5NzI1IDE0LjY3NTU0NyBDIDI4LjUwMzQyNCAxMy42Mjg0MDggMjguMDIwNTM1IDEyLjYzNjY1IDI3LjM5NzQ4MSAxMS43MzQgQyAyNi43NzQ0MjYgMTAuODMxMzUgMjYuMDE4MzUxIDEwLjAyODE1OSAyNS4xNTQ5NjcgOS4zNTE3NDEgQyAyNC4yOTE1ODQgOC42NzUzMjMgMjMuMzMwNzkxIDguMTMzNDM0IDIyLjMwNTI2NCA3Ljc0NDUwMyBDIDIxLjI3OTczNyA3LjM1NTU3MiAyMC4yMDEyMzUgNy4xMjQwNTkgMTkuMTA2NDM1IDcuMDU3ODM1IEMgMTguMDExNjM1IDYuOTkxNjEyIDE2LjkxMzA5IDcuMDkxNDM5IDE1Ljg0ODE2IDcuMzUzOTIxIEMgMTQuNzgzMjMgNy42MTY0MDIgMTMuNzY0MTI1IDguMDM4NTI5IDEyLjgyNTUwMyA4LjYwNTk0NiBDIDExLjg4Njg4MSA5LjE3MzM2MyAxMS4wMzk1MDQgOS44Nzk1NjMgMTAuMzEyMTkxIDEwLjcwMDUzMSBDIDkuNTg0ODc3IDExLjUyMTQ5OCA4Ljk4NTk2NiAxMi40NDc4MiA4LjUzNTgyNSAxMy40NDc5OTIgQyA4LjA4NTY4MyAxNC40NDgxNjUgNy43ODk0NzQgMTUuNTEwNzIyIDcuNjU3MjY5IDE2LjU5OTUyNiBDIDcuNTI1MDY0IDE3LjY4ODMzIDcuNTU4MzggMTguNzkwODk4IDcuNzU2MDg0IDE5Ljg2OTczMyBDIDcuOTUzNzg4IDIwLjk0ODU2OSA4LjMxMzYxMyAyMS45OTEzMDIgOC44MjMzMjIgMjIuOTYyNDcxIEMgOS4zMzMwMzEgMjMuOTMzNjQgOS45ODY3OCAyNC44MjIxMSAxMC43NjIzMzYgMjUuNTk3NjY1IEMgMTEuNTM3ODkxIDI2LjM3MzIyMSAxMi40MjYzNjEgMjcuMDI2OTY5IDEzLjM5NzUzIDI3LjUzNjY3OCBDIDE0LjM2ODcgMjguMDQ2Mzg3IDE1LjQxMTQzMyAyOC40MDYyMTIgMTYuNDkwMjY4IDI4LjYwMzkxNiBDIDE3LjU2OTEwNCAyOC44MDE2MiAxOC42NzE2NzIgMjguODM0OTM2IDE5Ljc2MDQ3NiAyOC43MDI3MzEgTCAxOC40NSAxNy45MSBMIDI5LjMyMiAxNy45MSB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMTkuNzYwNDc2IDI4LjcwMjczMSBDIDIyLjM5Njg2NyAyOC4zODI2MTUgMjQuODI2NzE5IDI3LjEwNzMzIDI2LjU4NzgxIDI1LjExOTQ2OSBDIDI4LjM0ODkgMjMuMTMxNjA4IDI5LjMyMiAyMC41NjU3NTMgMjkuMzIyIDE3LjkwOTk5OSBMIDE4LjQ1IDE3LjkxIEwgMTkuNzYwNDc2IDI4LjcwMjczMSB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyX2UxNDk4ODUzZTQzYzQ5ODdiYTEwNmIyMGEyNTFjOGQzLnNldEljb24oZGl2X2ljb25fMmI2Y2RhNzAxYjZlNDJiNzg3ZWNkMjc2ZGM5ZjlhYWMpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzZlOWQ5MWMyMjYyZDRlZWZiNTI5ZTI0MzU4MzM2ZjM4ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lYzk3MWYzOTA3Yjc0ZjFjYmFiOTE2ODA1Mzc1ODNkMyA9ICQoYDxkaXYgaWQ9Imh0bWxfZWM5NzFmMzkwN2I3NGYxY2JhYjkxNjgwNTM3NTgzZDMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDIwPGJyPiBWb3dlbHM6IDY8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNmU5ZDkxYzIyNjJkNGVlZmI1MjllMjQzNTgzMzZmMzguc2V0Q29udGVudChodG1sX2VjOTcxZjM5MDdiNzRmMWNiYWI5MTY4MDUzNzU4M2QzKTsKICAgICAgICAKCiAgICAgICAgbWFya2VyX2UxNDk4ODUzZTQzYzQ5ODdiYTEwNmIyMGEyNTFjOGQzLmJpbmRQb3B1cChwb3B1cF82ZTlkOTFjMjI2MmQ0ZWVmYjUyOWUyNDM1ODMzNmYzOCkKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl80ZjY3ZTNlOTUxZGE0MWJiOGI1ZDgzNDM1ODIwY2E5NCA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzM0Ljk0MDMsIC05OC45MDQyXSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDNkZjc0MDNiYzRiOWU4NjMxMWFmNmFmNDZmYjI5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fMGEyMmNlZGNmOTM2NDVkZmIwMjBjZDlmNzY5OTdiY2UgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjbWV0YWRhdGFcdTAwM2UgIFx1MDAzY3JkZjpSREYgeG1sbnM6Y2M9XCJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNcIiB4bWxuczpkYz1cImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIgeG1sbnM6cmRmPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiXHUwMDNlICAgXHUwMDNjY2M6V29ya1x1MDAzZSAgICBcdTAwM2NkYzp0eXBlIHJkZjpyZXNvdXJjZT1cImh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlXCIvXHUwMDNlICAgIFx1MDAzY2RjOmRhdGVcdTAwM2UyMDIwLTExLTE2VDE1OjAxOjI3LjU4Mjg4MFx1MDAzYy9kYzpkYXRlXHUwMDNlICAgIFx1MDAzY2RjOmZvcm1hdFx1MDAzZWltYWdlL3N2Zyt4bWxcdTAwM2MvZGM6Zm9ybWF0XHUwMDNlICAgIFx1MDAzY2RjOmNyZWF0b3JcdTAwM2UgICAgIFx1MDAzY2NjOkFnZW50XHUwMDNlICAgICAgXHUwMDNjZGM6dGl0bGVcdTAwM2VNYXRwbG90bGliIHYzLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy9cdTAwM2MvZGM6dGl0bGVcdTAwM2UgICAgIFx1MDAzYy9jYzpBZ2VudFx1MDAzZSAgICBcdTAwM2MvZGM6Y3JlYXRvclx1MDAzZSAgIFx1MDAzYy9jYzpXb3JrXHUwMDNlICBcdTAwM2MvcmRmOlJERlx1MDAzZSBcdTAwM2MvbWV0YWRhdGFcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO31cdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuMzIyIDE3LjkxIEMgMjkuMzIyIDE2LjQxMzg1MyAyOS4wMTMxNjIgMTQuOTMzNjg2IDI4LjQxNDg2NSAxMy41NjIzNzQgQyAyNy44MTY1NjcgMTIuMTkxMDYyIDI2Ljk0MTU5MSAxMC45NTc4OTggMjUuODQ0ODM4IDkuOTQwMjYgQyAyNC43NDgwODQgOC45MjI2MjEgMjMuNDUyOTgyIDguMTQyMjQ2IDIyLjA0MDc5MyA3LjY0ODEgQyAyMC42Mjg2MDUgNy4xNTM5NTQgMTkuMTI5NDk3IDYuOTU2NTkzIDE3LjYzNzUzMyA3LjA2ODQgQyAxNi4xNDU1NyA3LjE4MDIwOCAxNC42OTI2MjEgNy41OTg3OTUgMTMuMzY5ODU0IDguMjk3ODk4IEMgMTIuMDQ3MDg4IDguOTk3MDAxIDEwLjg4Mjc2IDkuOTYxNjg1IDkuOTQ5OTI3IDExLjEzMTQyIEMgOS4wMTcwOTUgMTIuMzAxMTU1IDguMzM1Njg1IDEzLjY1MDk1NCA3Ljk0ODQ1NCAxNS4wOTYxMjEgQyA3LjU2MTIyMyAxNi41NDEyODggNy40NzY0NDIgMTguMDUwOTUzIDcuNjk5NDMyIDE5LjUzMDM4OSBMIDE4LjQ1IDE3LjkxIEwgMjkuMzIyIDE3LjkxIHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSA3LjY5OTQzMiAxOS41MzAzODkgQyA4LjEwODA5NSAyMi4yNDE2OTMgOS41Mjc2OTQgMjQuNzAwNTA5IDExLjY3MTQyIDI2LjQxMDA3MyBDIDEzLjgxNTE0NyAyOC4xMTk2MzcgMTYuNTI4MjA2IDI4Ljk1NjUwNSAxOS4yNjI0NjggMjguNzUxNiBDIDIxLjk5NjcyOSAyOC41NDY2OTQgMjQuNTU0NzU3IDI3LjMxNDgxMyAyNi40MTk3NDEgMjUuMzA0ODM3IEMgMjguMjg0NzI2IDIzLjI5NDg2MSAyOS4zMjIwMDEgMjAuNjUxOTI2IDI5LjMyMiAxNy45MDk5OTggTCAxOC40NSAxNy45MSBMIDcuNjk5NDMyIDE5LjUzMDM4OSB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyXzRmNjdlM2U5NTFkYTQxYmI4YjVkODM0MzU4MjBjYTk0LnNldEljb24oZGl2X2ljb25fMGEyMmNlZGNmOTM2NDVkZmIwMjBjZDlmNzY5OTdiY2UpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzMyNjRiYTdkNGQ3NDQ0Mzk5ZjlkNmRmMGQ5MTQ2OWZjID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF8yODQ0MTQ4NjU5NGU0ZTU3YmRlZmQzNDU3MTNjMzNkYyA9ICQoYDxkaXYgaWQ9Imh0bWxfMjg0NDE0ODY1OTRlNGU1N2JkZWZkMzQ1NzEzYzMzZGMiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDIyPGJyPiBWb3dlbHM6IDIwPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzMyNjRiYTdkNGQ3NDQ0Mzk5ZjlkNmRmMGQ5MTQ2OWZjLnNldENvbnRlbnQoaHRtbF8yODQ0MTQ4NjU5NGU0ZTU3YmRlZmQzNDU3MTNjMzNkYyk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl80ZjY3ZTNlOTUxZGE0MWJiOGI1ZDgzNDM1ODIwY2E5NC5iaW5kUG9wdXAocG9wdXBfMzI2NGJhN2Q0ZDc0NDQzOTlmOWQ2ZGYwZDkxNDY5ZmMpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMjBkODE1MGUxYmY5NDdiM2IzZWI3ZTNjZGNiMThiZWMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFszNS4wLCAxMzUuMF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wODAzZGY3NDAzYmM0YjllODYzMTFhZjZhZjQ2ZmIyOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uX2FhZTYyMjExOTRhZTRkYTlhOWEwMmY0YTg3MGU0ZjVhID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY21ldGFkYXRhXHUwMDNlICBcdTAwM2NyZGY6UkRGIHhtbG5zOmNjPVwiaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIlx1MDAzZSAgIFx1MDAzY2NjOldvcmtcdTAwM2UgICAgXHUwMDNjZGM6dHlwZSByZGY6cmVzb3VyY2U9XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZVwiL1x1MDAzZSAgICBcdTAwM2NkYzpkYXRlXHUwMDNlMjAyMC0xMS0xNlQxNTowMToyNy42MjgxNDNcdTAwM2MvZGM6ZGF0ZVx1MDAzZSAgICBcdTAwM2NkYzpmb3JtYXRcdTAwM2VpbWFnZS9zdmcreG1sXHUwMDNjL2RjOmZvcm1hdFx1MDAzZSAgICBcdTAwM2NkYzpjcmVhdG9yXHUwMDNlICAgICBcdTAwM2NjYzpBZ2VudFx1MDAzZSAgICAgIFx1MDAzY2RjOnRpdGxlXHUwMDNlTWF0cGxvdGxpYiB2My4zLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvXHUwMDNjL2RjOnRpdGxlXHUwMDNlICAgICBcdTAwM2MvY2M6QWdlbnRcdTAwM2UgICAgXHUwMDNjL2RjOmNyZWF0b3JcdTAwM2UgICBcdTAwM2MvY2M6V29ya1x1MDAzZSAgXHUwMDNjL3JkZjpSREZcdTAwM2UgXHUwMDNjL21ldGFkYXRhXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9XHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjMyMiAxNy45MSBDIDI5LjMyMiAxNS43NTk5NzkgMjguNjg0MjI1IDEzLjY1NzUxOCAyNy40ODk3MzggMTEuODY5ODQgQyAyNi4yOTUyNSAxMC4wODIxNjMgMjQuNTk2ODk1IDguNjg4MzU5IDIyLjYxMDUzNCA3Ljg2NTU4MiBDIDIwLjYyNDE3NCA3LjA0MjgwNCAxOC40Mzc2ODcgNi44Mjc0NTQgMTYuMzI4OTc4IDcuMjQ2OTAyIEMgMTQuMjIwMjY5IDcuNjY2MzUxIDEyLjI4MjYzIDguNzAyMDQxIDEwLjc2MjMzNSAxMC4yMjIzMzUgQyA5LjI0MjA0MSAxMS43NDI2MyA4LjIwNjM1MSAxMy42ODAyNjkgNy43ODY5MDIgMTUuNzg4OTc4IEMgNy4zNjc0NTQgMTcuODk3Njg3IDcuNTgyODA0IDIwLjA4NDE3NCA4LjQwNTU4MiAyMi4wNzA1MzQgQyA5LjIyODM1OSAyNC4wNTY4OTUgMTAuNjIyMTYzIDI1Ljc1NTI1IDEyLjQwOTg0IDI2Ljk0OTczOCBDIDE0LjE5NzUxOCAyOC4xNDQyMjUgMTYuMjk5OTc5IDI4Ljc4MiAxOC40NSAyOC43ODIgTCAxOC40NSAxNy45MSBMIDI5LjMyMiAxNy45MSB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMTguNDUgMjguNzgyIEMgMjEuMzMyMzI4IDI4Ljc4MiAyNC4wOTk1NTEgMjcuNjM1Nzc4IDI2LjEzNzY2NSAyNS41OTc2NjUgQyAyOC4xNzU3NzggMjMuNTU5NTUxIDI5LjMyMiAyMC43OTIzMjggMjkuMzIyIDE3LjkxIEwgMTguNDUgMTcuOTEgTCAxOC40NSAyOC43ODIgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl8yMGQ4MTUwZTFiZjk0N2IzYjNlYjdlM2NkY2IxOGJlYy5zZXRJY29uKGRpdl9pY29uX2FhZTYyMjExOTRhZTRkYTlhOWEwMmY0YTg3MGU0ZjVhKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF85MDQ1MWQ2OThiOTc0NjBkOWQ4MWU5ZDYyYmYzMGViMSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfNzg2OTE2MjM4MTZjNDNmNzhlMzIwZDVjNjg3NWVmNDUgPSAkKGA8ZGl2IGlkPSJodG1sXzc4NjkxNjIzODE2YzQzZjc4ZTMyMGQ1YzY4NzVlZjQ1IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAxNTxicj4gVm93ZWxzOiA1PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzkwNDUxZDY5OGI5NzQ2MGQ5ZDgxZTlkNjJiZjMwZWIxLnNldENvbnRlbnQoaHRtbF83ODY5MTYyMzgxNmM0M2Y3OGUzMjBkNWM2ODc1ZWY0NSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8yMGQ4MTUwZTFiZjk0N2IzYjNlYjdlM2NkY2IxOGJlYy5iaW5kUG9wdXAocG9wdXBfOTA0NTFkNjk4Yjk3NDYwZDlkODFlOWQ2MmJmMzBlYjEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTAyMmM3YmM4MTJhNDViOTgxZWZhMDg1YmQ3YWFiMDYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFs3LjE1MzQ1LCAzLjY3MjI1XSwKICAgICAgICAgICAgICAgIHt9CiAgICAgICAgICAgICkuYWRkVG8obWFwXzA4MDNkZjc0MDNiYzRiOWU4NjMxMWFmNmFmNDZmYjI5KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgZGl2X2ljb25fNjUxYTUxMGY3ODhiNDE4ZGI1NzhiNjQyMDdkNjA4N2YgPSBMLmRpdkljb24oeyJjbGFzc05hbWUiOiAiZW1wdHkiLCAiaHRtbCI6ICJcdTAwM2M/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cInV0Zi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/XHUwMDNlXHUwMDNjIURPQ1RZUEUgc3ZnIFBVQkxJQyBcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXCIgIFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXCJcdTAwM2VcdTAwM2MhLS0gQ3JlYXRlZCB3aXRoIG1hdHBsb3RsaWIgKGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvKSAtLVx1MDAzZVx1MDAzY3N2ZyBoZWlnaHQ9XCIzNnB0XCIgdmVyc2lvbj1cIjEuMVwiIHZpZXdCb3g9XCIwIDAgMzYgMzZcIiB3aWR0aD1cIjM2cHRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcdTAwM2UgXHUwMDNjbWV0YWRhdGFcdTAwM2UgIFx1MDAzY3JkZjpSREYgeG1sbnM6Y2M9XCJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyNcIiB4bWxuczpkYz1cImh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvXCIgeG1sbnM6cmRmPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zI1wiXHUwMDNlICAgXHUwMDNjY2M6V29ya1x1MDAzZSAgICBcdTAwM2NkYzp0eXBlIHJkZjpyZXNvdXJjZT1cImh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlXCIvXHUwMDNlICAgIFx1MDAzY2RjOmRhdGVcdTAwM2UyMDIwLTExLTE2VDE1OjAxOjI3LjY3MTY3Mlx1MDAzYy9kYzpkYXRlXHUwMDNlICAgIFx1MDAzY2RjOmZvcm1hdFx1MDAzZWltYWdlL3N2Zyt4bWxcdTAwM2MvZGM6Zm9ybWF0XHUwMDNlICAgIFx1MDAzY2RjOmNyZWF0b3JcdTAwM2UgICAgIFx1MDAzY2NjOkFnZW50XHUwMDNlICAgICAgXHUwMDNjZGM6dGl0bGVcdTAwM2VNYXRwbG90bGliIHYzLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy9cdTAwM2MvZGM6dGl0bGVcdTAwM2UgICAgIFx1MDAzYy9jYzpBZ2VudFx1MDAzZSAgICBcdTAwM2MvZGM6Y3JlYXRvclx1MDAzZSAgIFx1MDAzYy9jYzpXb3JrXHUwMDNlICBcdTAwM2MvcmRmOlJERlx1MDAzZSBcdTAwM2MvbWV0YWRhdGFcdTAwM2UgXHUwMDNjZGVmc1x1MDAzZSAgXHUwMDNjc3R5bGUgdHlwZT1cInRleHQvY3NzXCJcdTAwM2Uqe3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO31cdTAwM2Mvc3R5bGVcdTAwM2UgXHUwMDNjL2RlZnNcdTAwM2UgXHUwMDNjZyBpZD1cImZpZ3VyZV8xXCJcdTAwM2UgIFx1MDAzY2cgaWQ9XCJwYXRjaF8xXCJcdTAwM2UgICBcdTAwM2NwYXRoIGQ9XCJNIDAgMzYgTCAzNiAzNiBMIDM2IDAgTCAwIDAgelwiIHN0eWxlPVwiZmlsbDpub25lO29wYWNpdHk6MDtcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlICBcdTAwM2NnIGlkPVwiYXhlc18xXCJcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfMlwiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjkuMzIyIDE3LjkxIEMgMjkuMzIyIDE2LjEzNDY0MiAyOC44ODcxMzYgMTQuMzg2MDE0IDI4LjA1NTU0MyAxMi44MTc0NjQgQyAyNy4yMjM5NSAxMS4yNDg5MTMgMjYuMDIwNjcgOS45MDc2NzMgMjQuNTUxMjI2IDguOTExMzY1IEMgMjMuMDgxNzgyIDcuOTE1MDU3IDIxLjM5MDQyMSA3LjI5MzY4MiAxOS42MjU0NzEgNy4xMDE3MzIgQyAxNy44NjA1MiA2LjkwOTc4MiAxNi4wNzUxMjUgNy4xNTMwMzcgMTQuNDI1ODU5IDcuODEwMTY1IEMgMTIuNzc2NTkyIDguNDY3MjkyIDExLjMxMzExNyA5LjUxODUwNSAxMC4xNjM3NzUgMTAuODcxNjE2IEMgOS4wMTQ0MzIgMTIuMjI0NzI2IDguMjEzODMxIDEzLjgzODk4OSA3LjgzMjE4MiAxNS41NzI4NCBDIDcuNDUwNTMyIDE3LjMwNjY5MSA3LjQ5OTMyNiAxOS4xMDc5MiA3Ljk3NDI4NCAyMC44MTg1NjcgQyA4LjQ0OTI0MiAyMi41MjkyMTMgOS4zMzYwNjMgMjQuMDk3NzY1IDEwLjU1Njk3NiAyNS4zODY2NjcgTCAxOC40NSAxNy45MSBMIDI5LjMyMiAxNy45MSB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMTAuNTU2OTc2IDI1LjM4NjY2NyBDIDEyLjA1Mjc4MyAyNi45NjU3NzIgMTMuOTg4NjAzIDI4LjA2MDIzOCAxNi4xMTI4NCAyOC41Mjc4MTggQyAxOC4yMzcwNzYgMjguOTk1Mzk4IDIwLjQ1MzUzMyAyOC44MTQ5MTkgMjIuNDc0MTQgMjguMDA5ODM2IEMgMjQuNDk0NzQ3IDI3LjIwNDc1MyAyNi4yMjgwMDIgMjUuODExNTI0IDI3LjQ0ODYzNCAyNC4wMTEyMjcgQyAyOC42NjkyNjYgMjIuMjEwOTMgMjkuMzIyIDIwLjA4NTA5MSAyOS4zMjIgMTcuOTEwMDAyIEwgMTguNDUgMTcuOTEgTCAxMC41NTY5NzYgMjUuMzg2NjY3IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfMTAyMmM3YmM4MTJhNDViOTgxZWZhMDg1YmQ3YWFiMDYuc2V0SWNvbihkaXZfaWNvbl82NTFhNTEwZjc4OGI0MThkYjU3OGI2NDIwN2Q2MDg3Zik7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfNzg4MDRmNmQ4Yzk4NDhhYWI5OWY4MzYxNDI0Nzk1ZGIgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzBhYjZlZjcwMmJjNjQ1ZWNiYTZlNGRkYmVlZGM0NWQ3ID0gJChgPGRpdiBpZD0iaHRtbF8wYWI2ZWY3MDJiYzY0NWVjYmE2ZTRkZGJlZWRjNDVkNyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogMTg8YnI+IFZvd2VsczogMTE8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfNzg4MDRmNmQ4Yzk4NDhhYWI5OWY4MzYxNDI0Nzk1ZGIuc2V0Q29udGVudChodG1sXzBhYjZlZjcwMmJjNjQ1ZWNiYTZlNGRkYmVlZGM0NWQ3KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzEwMjJjN2JjODEyYTQ1Yjk4MWVmYTA4NWJkN2FhYjA2LmJpbmRQb3B1cChwb3B1cF83ODgwNGY2ZDhjOTg0OGFhYjk5ZjgzNjE0MjQ3OTVkYikKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl85NmJlOTg1YmUxODc0MzljYTc4ZTlkNTgzMTJhY2I5YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzY0Ljc2MjgsIDI1LjU1NzddLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwM2RmNzQwM2JjNGI5ZTg2MzExYWY2YWY0NmZiMjkpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl8yNmRlM2E3OTBkMzI0ZGJiODcyZjJhMzIyOTM4ZDk5NiA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NtZXRhZGF0YVx1MDAzZSAgXHUwMDNjcmRmOlJERiB4bWxuczpjYz1cImh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI1wiIHhtbG5zOmRjPVwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIiB4bWxuczpyZGY9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCJcdTAwM2UgICBcdTAwM2NjYzpXb3JrXHUwMDNlICAgIFx1MDAzY2RjOnR5cGUgcmRmOnJlc291cmNlPVwiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2VcIi9cdTAwM2UgICAgXHUwMDNjZGM6ZGF0ZVx1MDAzZTIwMjAtMTEtMTZUMTU6MDE6MjcuNzIxMDc3XHUwMDNjL2RjOmRhdGVcdTAwM2UgICAgXHUwMDNjZGM6Zm9ybWF0XHUwMDNlaW1hZ2Uvc3ZnK3htbFx1MDAzYy9kYzpmb3JtYXRcdTAwM2UgICAgXHUwMDNjZGM6Y3JlYXRvclx1MDAzZSAgICAgXHUwMDNjY2M6QWdlbnRcdTAwM2UgICAgICBcdTAwM2NkYzp0aXRsZVx1MDAzZU1hdHBsb3RsaWIgdjMuMy4zLCBodHRwczovL21hdHBsb3RsaWIub3JnL1x1MDAzYy9kYzp0aXRsZVx1MDAzZSAgICAgXHUwMDNjL2NjOkFnZW50XHUwMDNlICAgIFx1MDAzYy9kYzpjcmVhdG9yXHUwMDNlICAgXHUwMDNjL2NjOldvcmtcdTAwM2UgIFx1MDAzYy9yZGY6UkRGXHUwMDNlIFx1MDAzYy9tZXRhZGF0YVx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fVx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS4zMjIgMTcuOTEgQyAyOS4zMjIgMTUuOTYzMTAxIDI4Ljc5OTA0IDE0LjA1MTQ4IDI3LjgwNzk4NyAxMi4zNzU3MDIgQyAyNi44MTY5MzUgMTAuNjk5OTI0IDI1LjM5MzcwNyA5LjMyMDcyIDIzLjY4NzYyNiA4LjM4Mjc5NCBDIDIxLjk4MTU0NSA3LjQ0NDg2OCAyMC4wNTQ0NDEgNi45ODIyMTEgMTguMTA4NTAyIDcuMDQzMzY1IEMgMTYuMTYyNTYzIDcuMTA0NTE4IDE0LjI2ODMxMiA3LjY4NzI2NiAxMi42MjQ0OTEgOC43MzA0NjcgQyAxMC45ODA2NyA5Ljc3MzY2OCA5LjY0Njg1MSAxMS4yMzk1MTYgOC43NjI5NzcgMTIuOTc0MjE2IEMgNy44NzkxMDMgMTQuNzA4OTE2IDcuNDc3MjA3IDE2LjY0OTYwMSA3LjU5OTQ1MyAxOC41OTI2NTkgQyA3LjcyMTcgMjAuNTM1NzE2IDguMzYzNjYgMjIuNDEwNzI4IDkuNDU3OTggMjQuMDIwOTcxIEMgMTAuNTUyMyAyNS42MzEyMTMgMTIuMDU5MzIxIDI2LjkxODMzMSAxMy44MjA5MjggMjcuNzQ3MjggTCAxOC40NSAxNy45MSBMIDI5LjMyMiAxNy45MSB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMTMuODIwOTI4IDI3Ljc0NzI4IEMgMTUuNDc3ODA3IDI4LjUyNjk0OCAxNy4zMDUxMTcgMjguODc1NTI2IDE5LjEzMjY1OSAyOC43NjA1NDcgQyAyMC45NjAyIDI4LjY0NTU2NyAyMi43Mjk0MTQgMjguMDcwNzE1IDI0LjI3NTUwOSAyNy4wODk1MzMgQyAyNS44MjE2MDQgMjYuMTA4MzUxIDI3LjA5NTA0MSAyNC43NTIyNzkgMjcuOTc3MjA2IDIzLjE0NzYyNiBDIDI4Ljg1OTM3MiAyMS41NDI5NzMgMjkuMzIyIDE5Ljc0MTE1NSAyOS4zMjIgMTcuOTEgTCAxOC40NSAxNy45MSBMIDEzLjgyMDkyOCAyNy43NDcyOCB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyXzk2YmU5ODViZTE4NzQzOWNhNzhlOWQ1ODMxMmFjYjlhLnNldEljb24oZGl2X2ljb25fMjZkZTNhNzkwZDMyNGRiYjg3MmYyYTMyMjkzOGQ5OTYpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzA5ZTgxM2FhNjljZTQ2NTdiNjA2NzBmMmVmOTU3MWU3ID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF83YTIwMWZjMTdlNzg0NTcwYjYxNzgzNTBhMWY3YTMzNyA9ICQoYDxkaXYgaWQ9Imh0bWxfN2EyMDFmYzE3ZTc4NDU3MGI2MTc4MzUwYTFmN2EzMzciIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDE3PGJyPiBWb3dlbHM6IDg8L2Rpdj5gKVswXTsKICAgICAgICAgICAgcG9wdXBfMDllODEzYWE2OWNlNDY1N2I2MDY3MGYyZWY5NTcxZTcuc2V0Q29udGVudChodG1sXzdhMjAxZmMxN2U3ODQ1NzBiNjE3ODM1MGExZjdhMzM3KTsKICAgICAgICAKCiAgICAgICAgbWFya2VyXzk2YmU5ODViZTE4NzQzOWNhNzhlOWQ1ODMxMmFjYjlhLmJpbmRQb3B1cChwb3B1cF8wOWU4MTNhYTY5Y2U0NjU3YjYwNjcwZjJlZjk1NzFlNykKICAgICAgICA7CgogICAgICAgIAogICAgCiAgICAKICAgICAgICAgICAgdmFyIG1hcmtlcl82MDhkMTE4ZGJiMGU0M2ZmYTVjMzI2MzJiZDc0YmY2YSA9IEwubWFya2VyKAogICAgICAgICAgICAgICAgWzE5LjYyOTcsIC0xNTUuNDNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfMDgwM2RmNzQwM2JjNGI5ZTg2MzExYWY2YWY0NmZiMjkpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBkaXZfaWNvbl9mZmM3MDVlYzRkOTI0MDcxYmJkY2U1MjY4MTZkZGY2NCA9IEwuZGl2SWNvbih7ImNsYXNzTmFtZSI6ICJlbXB0eSIsICJodG1sIjogIlx1MDAzYz94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiBzdGFuZGFsb25lPVwibm9cIj9cdTAwM2VcdTAwM2MhRE9DVFlQRSBzdmcgUFVCTElDIFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cIiAgXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcIlx1MDAzZVx1MDAzYyEtLSBDcmVhdGVkIHdpdGggbWF0cGxvdGxpYiAoaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pIC0tXHUwMDNlXHUwMDNjc3ZnIGhlaWdodD1cIjM2cHRcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzNiAzNlwiIHdpZHRoPVwiMzZwdFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlx1MDAzZSBcdTAwM2NtZXRhZGF0YVx1MDAzZSAgXHUwMDNjcmRmOlJERiB4bWxuczpjYz1cImh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zI1wiIHhtbG5zOmRjPVwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIiB4bWxuczpyZGY9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjXCJcdTAwM2UgICBcdTAwM2NjYzpXb3JrXHUwMDNlICAgIFx1MDAzY2RjOnR5cGUgcmRmOnJlc291cmNlPVwiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2VcIi9cdTAwM2UgICAgXHUwMDNjZGM6ZGF0ZVx1MDAzZTIwMjAtMTEtMTZUMTU6MDE6MjcuNzY3MTY0XHUwMDNjL2RjOmRhdGVcdTAwM2UgICAgXHUwMDNjZGM6Zm9ybWF0XHUwMDNlaW1hZ2Uvc3ZnK3htbFx1MDAzYy9kYzpmb3JtYXRcdTAwM2UgICAgXHUwMDNjZGM6Y3JlYXRvclx1MDAzZSAgICAgXHUwMDNjY2M6QWdlbnRcdTAwM2UgICAgICBcdTAwM2NkYzp0aXRsZVx1MDAzZU1hdHBsb3RsaWIgdjMuMy4zLCBodHRwczovL21hdHBsb3RsaWIub3JnL1x1MDAzYy9kYzp0aXRsZVx1MDAzZSAgICAgXHUwMDNjL2NjOkFnZW50XHUwMDNlICAgIFx1MDAzYy9kYzpjcmVhdG9yXHUwMDNlICAgXHUwMDNjL2NjOldvcmtcdTAwM2UgIFx1MDAzYy9yZGY6UkRGXHUwMDNlIFx1MDAzYy9tZXRhZGF0YVx1MDAzZSBcdTAwM2NkZWZzXHUwMDNlICBcdTAwM2NzdHlsZSB0eXBlPVwidGV4dC9jc3NcIlx1MDAzZSp7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46cm91bmQ7fVx1MDAzYy9zdHlsZVx1MDAzZSBcdTAwM2MvZGVmc1x1MDAzZSBcdTAwM2NnIGlkPVwiZmlndXJlXzFcIlx1MDAzZSAgXHUwMDNjZyBpZD1cInBhdGNoXzFcIlx1MDAzZSAgIFx1MDAzY3BhdGggZD1cIk0gMCAzNiBMIDM2IDM2IEwgMzYgMCBMIDAgMCB6XCIgc3R5bGU9XCJmaWxsOm5vbmU7b3BhY2l0eTowO1wiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgIFx1MDAzY2cgaWQ9XCJheGVzXzFcIlx1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8yXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyOS4zMjIgMTcuOTEgQyAyOS4zMjIgMTYuMTQ5OTYyIDI4Ljg5NDYwOCAxNC40MTU5NjYgMjguMDc2Njc4IDEyLjg1NzUzIEMgMjcuMjU4NzQ3IDExLjI5OTA5MyAyNi4wNzQ0ODMgOS45NjIzMzUgMjQuNjI2IDguOTYyNTE5IEMgMjMuMTc3NTE3IDcuOTYyNzA0IDIxLjUwNzY4IDcuMzI5NDE4IDE5Ljc2MDQ3NCA3LjExNzI2OSBDIDE4LjAxMzI2OSA2LjkwNTEyIDE2LjI0MDM5OSA3LjEyMDM4NSAxNC41OTQ3MzUgNy43NDQ1MDQgQyAxMi45NDkwNzEgOC4zNjg2MjIgMTEuNDc5MzEyIDkuMzgzMTI0IDEwLjMxMjE5IDEwLjcwMDUzMSBDIDkuMTQ1MDY5IDEyLjAxNzkzOSA4LjMxNTEyNSAxMy41OTkyNjcgNy44OTM5MiAxNS4zMDgxNjEgQyA3LjQ3MjcxNiAxNy4wMTcwNTYgNy40NzI3MTYgMTguODAyOTQ3IDcuODkzOTIxIDIwLjUxMTg0MSBDIDguMzE1MTI2IDIyLjIyMDczNiA5LjE0NTA3MSAyMy44MDIwNjMgMTAuMzEyMTkyIDI1LjExOTQ3MSBMIDE4LjQ1IDE3LjkxIEwgMjkuMzIyIDE3LjkxIHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAxMC4zMTIxOTIgMjUuMTE5NDcxIEMgMTEuNzc1MDEzIDI2Ljc3MDY1NCAxMy43MDYzMDUgMjcuOTM4MTYgMTUuODQ4MTYyIDI4LjQ2NjA4IEMgMTcuOTkwMDE5IDI4Ljk5NCAyMC4yNDI2NTkgMjguODU3NzQgMjIuMzA1MjY2IDI4LjA3NTQ5NiBDIDI0LjM2Nzg3MyAyNy4yOTMyNTIgMjYuMTQ0MzU1IDI1LjkwMTQ2NyAyNy4zOTc0ODIgMjQuMDg1OTk4IEMgMjguNjUwNjA4IDIyLjI3MDUzIDI5LjMyMiAyMC4xMTU5NTYgMjkuMzIyIDE3LjkwOTk5OCBMIDE4LjQ1IDE3LjkxIEwgMTAuMzEyMTkyIDI1LjExOTQ3MSB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyXzYwOGQxMThkYmIwZTQzZmZhNWMzMjYzMmJkNzRiZjZhLnNldEljb24oZGl2X2ljb25fZmZjNzA1ZWM0ZDkyNDA3MWJiZGNlNTI2ODE2ZGRmNjQpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwX2IwYWVhZTU0ODliMDQ0OGY4YWM2ZTU0MjIzY2VjMjVmID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF84MTI0YWVmYzA4Yzg0ZWI4OTdiMzYwOTk3ZGIwOTM4NiA9ICQoYDxkaXYgaWQ9Imh0bWxfODEyNGFlZmMwOGM4NGViODk3YjM2MDk5N2RiMDkzODYiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDg8YnI+IFZvd2VsczogNTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9iMGFlYWU1NDg5YjA0NDhmOGFjNmU1NDIyM2NlYzI1Zi5zZXRDb250ZW50KGh0bWxfODEyNGFlZmMwOGM4NGViODk3YjM2MDk5N2RiMDkzODYpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfNjA4ZDExOGRiYjBlNDNmZmE1YzMyNjMyYmQ3NGJmNmEuYmluZFBvcHVwKHBvcHVwX2IwYWVhZTU0ODliMDQ0OGY4YWM2ZTU0MjIzY2VjMjVmKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzM3OTM5MjNlZGFjNjQ1ZjJiZTIwNTRlNThlMjFiZGZiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuOTA2ODU4NTcxNCwgMTkuNjU1NTI3MTQyOV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wODAzZGY3NDAzYmM0YjllODYzMTFhZjZhZjQ2ZmIyOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzYwOGFjM2Y1ZWM1NjQ4ZDdiZjBlZDdmZDUzMDJhNjE2ID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY21ldGFkYXRhXHUwMDNlICBcdTAwM2NyZGY6UkRGIHhtbG5zOmNjPVwiaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIlx1MDAzZSAgIFx1MDAzY2NjOldvcmtcdTAwM2UgICAgXHUwMDNjZGM6dHlwZSByZGY6cmVzb3VyY2U9XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZVwiL1x1MDAzZSAgICBcdTAwM2NkYzpkYXRlXHUwMDNlMjAyMC0xMS0xNlQxNTowMToyNy44MTMxODFcdTAwM2MvZGM6ZGF0ZVx1MDAzZSAgICBcdTAwM2NkYzpmb3JtYXRcdTAwM2VpbWFnZS9zdmcreG1sXHUwMDNjL2RjOmZvcm1hdFx1MDAzZSAgICBcdTAwM2NkYzpjcmVhdG9yXHUwMDNlICAgICBcdTAwM2NjYzpBZ2VudFx1MDAzZSAgICAgIFx1MDAzY2RjOnRpdGxlXHUwMDNlTWF0cGxvdGxpYiB2My4zLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvXHUwMDNjL2RjOnRpdGxlXHUwMDNlICAgICBcdTAwM2MvY2M6QWdlbnRcdTAwM2UgICAgXHUwMDNjL2RjOmNyZWF0b3JcdTAwM2UgICBcdTAwM2MvY2M6V29ya1x1MDAzZSAgXHUwMDNjL3JkZjpSREZcdTAwM2UgXHUwMDNjL21ldGFkYXRhXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9XHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjMyMiAxNy45MSBDIDI5LjMyMiAxNi4wNDk5MyAyOC44NDQ2NDYgMTQuMjIwNjE0IDI3LjkzNTc3NyAxMi41OTc3MSBDIDI3LjAyNjkwNyAxMC45NzQ4MDcgMjUuNzE2NTc1IDkuNjExOTggMjQuMTMwNjA1IDguNjQwMDk2IEMgMjIuNTQ0NjM1IDcuNjY4MjEyIDIwLjczNTQ2OSA3LjExOTQwOCAxOC44NzY4MzMgNy4wNDYzODIgQyAxNy4wMTgxOTggNi45NzMzNTYgMTUuMTcxNTUgNy4zNzg1MjMgMTMuNTE0MjE2IDguMjIyOTc3IEMgMTEuODU2ODgyIDkuMDY3NDMxIDEwLjQ0MzY2MyAxMC4zMjMyNDggOS40MTAyNjMgMTEuODY5ODQgQyA4LjM3Njg2MyAxMy40MTY0MzEgNy43NTc0NTQgMTUuMjAyNjU2IDcuNjExNTE1IDE3LjA1Njk5MSBDIDcuNDY1NTc1IDE4LjkxMTMyNyA3Ljc5NzkzMSAyMC43NzI0NTggOC41NzY2NjcgMjIuNDYxNjY3IEMgOS4zNTU0MDMgMjQuMTUwODc3IDEwLjU1NDc2OSAyNS42MTIzMSAxMi4wNTk1OTcgMjYuNzA1NjMyIEwgMTguNDUgMTcuOTEgTCAyOS4zMjIgMTcuOTEgelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDEyLjA1OTU5NyAyNi43MDU2MzIgQyAxMy42ODE1NjEgMjcuODg0MDU4IDE1LjU5ODMxMyAyOC41OTExODUgMTcuNTk2OTkxIDI4Ljc0ODQ4NSBDIDE5LjU5NTY2OSAyOC45MDU3ODUgMjEuNTk5NDQxIDI4LjUwNzIxIDIzLjM4NTc4MyAyNy41OTcwMjQgQyAyNS4xNzIxMjUgMjYuNjg2ODM4IDI2LjY3MjM2NyAyNS4zMDAwMjggMjcuNzE5OTAzIDIzLjU5MDYwNiBDIDI4Ljc2NzQzOSAyMS44ODExODQgMjkuMzIyIDE5LjkxNDg2IDI5LjMyMiAxNy45MTAwMDIgTCAxOC40NSAxNy45MSBMIDEyLjA1OTU5NyAyNi43MDU2MzIgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl8zNzkzOTIzZWRhYzY0NWYyYmUyMDU0ZTU4ZTIxYmRmYi5zZXRJY29uKGRpdl9pY29uXzYwOGFjM2Y1ZWM1NjQ4ZDdiZjBlZDdmZDUzMDJhNjE2KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9hNTdiM2UyNWZlYjI0Y2M3ODIwZTg1ZjliOWFiZTJjOCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfZDQ5Y2YxOWRhOGNjNDk3NzljMGMzODQ0MDAzZGNmODcgPSAkKGA8ZGl2IGlkPSJodG1sX2Q0OWNmMTlkYThjYzQ5Nzc5YzBjMzg0NDAwM2RjZjg3IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAyNjxicj4gVm93ZWxzOiAxNDwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF9hNTdiM2UyNWZlYjI0Y2M3ODIwZTg1ZjliOWFiZTJjOC5zZXRDb250ZW50KGh0bWxfZDQ5Y2YxOWRhOGNjNDk3NzljMGMzODQ0MDAzZGNmODcpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfMzc5MzkyM2VkYWM2NDVmMmJlMjA1NGU1OGUyMWJkZmIuYmluZFBvcHVwKHBvcHVwX2E1N2IzZTI1ZmViMjRjYzc4MjBlODVmOWI5YWJlMmM4KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2JlMTEwMjlhMWUwYTRhZjRiNGNmN2Q4ODFlZGI1NjkxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDEuODUwMzk2OTk5OTk5OTk0LCA0My43ODYxM10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wODAzZGY3NDAzYmM0YjllODYzMTFhZjZhZjQ2ZmIyOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uX2VjMjk5MWIxYmJlZDQ1MDRiZWU1ZjcxZWY2YmI0MTI0ID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY21ldGFkYXRhXHUwMDNlICBcdTAwM2NyZGY6UkRGIHhtbG5zOmNjPVwiaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIlx1MDAzZSAgIFx1MDAzY2NjOldvcmtcdTAwM2UgICAgXHUwMDNjZGM6dHlwZSByZGY6cmVzb3VyY2U9XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZVwiL1x1MDAzZSAgICBcdTAwM2NkYzpkYXRlXHUwMDNlMjAyMC0xMS0xNlQxNTowMToyNy44NTQ2ODZcdTAwM2MvZGM6ZGF0ZVx1MDAzZSAgICBcdTAwM2NkYzpmb3JtYXRcdTAwM2VpbWFnZS9zdmcreG1sXHUwMDNjL2RjOmZvcm1hdFx1MDAzZSAgICBcdTAwM2NkYzpjcmVhdG9yXHUwMDNlICAgICBcdTAwM2NjYzpBZ2VudFx1MDAzZSAgICAgIFx1MDAzY2RjOnRpdGxlXHUwMDNlTWF0cGxvdGxpYiB2My4zLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvXHUwMDNjL2RjOnRpdGxlXHUwMDNlICAgICBcdTAwM2MvY2M6QWdlbnRcdTAwM2UgICAgXHUwMDNjL2RjOmNyZWF0b3JcdTAwM2UgICBcdTAwM2MvY2M6V29ya1x1MDAzZSAgXHUwMDNjL3JkZjpSREZcdTAwM2UgXHUwMDNjL21ldGFkYXRhXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9XHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjMyMiAxNy45MSBDIDI5LjMyMiAxNi43MzU0NTMgMjkuMTMxNjYzIDE1LjU2ODYzMSAyOC43NTg0MDMgMTQuNDU0OTcyIEMgMjguMzg1MTQyIDEzLjM0MTMxMyAyNy44MzM4NjYgMTIuMjk1NDY1IDI3LjEyNjA0MyAxMS4zNTgxNTYgQyAyNi40MTgyMjEgMTAuNDIwODQ4IDI1LjU2MzE2MSA5LjYwNDQwNiAyNC41OTQxNjMgOC45NDA2MjcgQyAyMy42MjUxNjUgOC4yNzY4NDggMjIuNTU0OTczIDcuNzc0NDYxIDIxLjQyNTI2NCA3LjQ1MzAzMiBDIDIwLjI5NTU1NSA3LjEzMTYwMiAxOS4xMjExODcgNi45OTUzNTYgMTcuOTQ3ODkzIDcuMDQ5NjAxIEMgMTYuNzc0NiA3LjEwMzg0NSAxNS42MTc4MTIgNy4zNDc4NjcgMTQuNTIyNTggNy43NzIxNjIgQyAxMy40MjczNDggOC4xOTY0NTcgMTIuNDA4MDc2IDguNzk1NDQ2IDExLjUwNDQ1NyA5LjU0NTgwMSBDIDEwLjYwMDgzOSAxMC4yOTYxNTcgOS44MjQ3NTggMTEuMTg4MDEgOS4yMDY0MzkgMTIuMTg2NjMgQyA4LjU4ODEyIDEzLjE4NTI1IDguMTM1Njk0IDE0LjI3NzUwMiA3Ljg2Njc4MSAxNS40MjA4NSBDIDcuNTk3ODY4IDE2LjU2NDE5OCA3LjUxNjAwNSAxNy43NDM2MDYgNy42MjQzNzggMTguOTEzMTQyIEMgNy43MzI3NTIgMjAuMDgyNjc4IDguMDI5OTM3IDIxLjIyNjk2MiA4LjUwNDM2MSAyMi4zMDE0MyBDIDguOTc4Nzg1IDIzLjM3NTg5OCA5LjYyNDIwOCAyNC4zNjY0MTkgMTAuNDE1NDk1IDI1LjIzNDQxOSBDIDExLjIwNjc4MiAyNi4xMDI0MiAxMi4xMzM1MjYgMjYuODM2NDgzIDEzLjE1OTYzNyAyNy40MDgwMjMgQyAxNC4xODU3NDcgMjcuOTc5NTYzIDE1LjI5NzcyOCAyOC4zODEwNjEgMTYuNDUyMjc2IDI4LjU5Njg4NCBDIDE3LjYwNjgyNCAyOC44MTI3MDYgMTguNzg4NzUzIDI4Ljg0MDAxMyAxOS45NTIwMzcgMjguNjc3NzQyIEMgMjEuMTE1MzIgMjguNTE1NDcxIDIyLjI0NDY1NyAyOC4xNjU3NTYgMjMuMjk2MDY4IDI3LjY0MjIxNSBMIDE4LjQ1IDE3LjkxIEwgMjkuMzIyIDE3LjkxIHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyMy4yOTYwNjggMjcuNjQyMjE1IEMgMjUuMTA2MDEzIDI2Ljc0MDk2OSAyNi42MjkxNiAyNS4zNTI0MzggMjcuNjkzNTYxIDIzLjYzMzM3IEMgMjguNzU3OTYzIDIxLjkxNDMwMiAyOS4zMjIgMTkuOTMxOTE1IDI5LjMyMiAxNy45MDk5OTkgTCAxOC40NSAxNy45MSBMIDIzLjI5NjA2OCAyNy42NDIyMTUgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl9iZTExMDI5YTFlMGE0YWY0YjRjZjdkODgxZWRiNTY5MS5zZXRJY29uKGRpdl9pY29uX2VjMjk5MWIxYmJlZDQ1MDRiZWU1ZjcxZWY2YmI0MTI0KTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8yOWM3MTEyMjA2OTI0MTY3OGRmZjdlNGZhY2E0MTBmNSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfODBlNmUxNDQ1MWVkNDhiZWJiOGI3OTYwZThiYTM2MDggPSAkKGA8ZGl2IGlkPSJodG1sXzgwZTZlMTQ0NTFlZDQ4YmViYjhiNzk2MGU4YmEzNjA4IiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAyODxicj4gVm93ZWxzOiA2PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzI5YzcxMTIyMDY5MjQxNjc4ZGZmN2U0ZmFjYTQxMGY1LnNldENvbnRlbnQoaHRtbF84MGU2ZTE0NDUxZWQ0OGJlYmI4Yjc5NjBlOGJhMzYwOCk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9iZTExMDI5YTFlMGE0YWY0YjRjZjdkODgxZWRiNTY5MS5iaW5kUG9wdXAocG9wdXBfMjljNzExMjIwNjkyNDE2NzhkZmY3ZTRmYWNhNDEwZjUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfZDRmMzk4MmFjN2Q3NDRmYWE5NzNjNmM5MWNhOGFiZTMgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxMS43MDgxODIsIDM5LjU0MzQ1Nl0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wODAzZGY3NDAzYmM0YjllODYzMTFhZjZhZjQ2ZmIyOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uX2NhZGJjYzBlNDFlNjQ2YTY5MWI5ODM1MDVjMWFlNDgzID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY21ldGFkYXRhXHUwMDNlICBcdTAwM2NyZGY6UkRGIHhtbG5zOmNjPVwiaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIlx1MDAzZSAgIFx1MDAzY2NjOldvcmtcdTAwM2UgICAgXHUwMDNjZGM6dHlwZSByZGY6cmVzb3VyY2U9XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZVwiL1x1MDAzZSAgICBcdTAwM2NkYzpkYXRlXHUwMDNlMjAyMC0xMS0xNlQxNTowMToyNy45MDkxNTVcdTAwM2MvZGM6ZGF0ZVx1MDAzZSAgICBcdTAwM2NkYzpmb3JtYXRcdTAwM2VpbWFnZS9zdmcreG1sXHUwMDNjL2RjOmZvcm1hdFx1MDAzZSAgICBcdTAwM2NkYzpjcmVhdG9yXHUwMDNlICAgICBcdTAwM2NjYzpBZ2VudFx1MDAzZSAgICAgIFx1MDAzY2RjOnRpdGxlXHUwMDNlTWF0cGxvdGxpYiB2My4zLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvXHUwMDNjL2RjOnRpdGxlXHUwMDNlICAgICBcdTAwM2MvY2M6QWdlbnRcdTAwM2UgICAgXHUwMDNjL2RjOmNyZWF0b3JcdTAwM2UgICBcdTAwM2MvY2M6V29ya1x1MDAzZSAgXHUwMDNjL3JkZjpSREZcdTAwM2UgXHUwMDNjL21ldGFkYXRhXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9XHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjMyMiAxNy45MSBDIDI5LjMyMiAxNi43NTM2NyAyOS4xMzc1MjIgMTUuNjA0NzA5IDI4Ljc3NTUzIDE0LjUwNjUwMSBDIDI4LjQxMzUzOSAxMy40MDgyOTIgMjcuODc4NjQ5IDEyLjM3NDgzNCAyNy4xOTEwNTcgMTEuNDQ1MTQ4IEMgMjYuNTAzNDY1IDEwLjUxNTQ2MiAyNS42NzE5MzQgOS43MDEzOTggMjQuNzI3ODYzIDkuMDMzNjk0IEMgMjMuNzgzNzkyIDguMzY1OTg5IDIyLjczOTIxNCA3Ljg1MzE1NSAyMS42MzM1NjkgNy41MTQ1NTUgQyAyMC41Mjc5MjUgNy4xNzU5NTUgMTkuMzc1MzA3IDcuMDE1OTA2IDE4LjIxOTIzOCA3LjA0MDQ0OSBDIDE3LjA2MzE2OCA3LjA2NDk5MyAxNS45MTgzODIgNy4yNzM4MTcgMTQuODI4MTA0IDcuNjU5MDM2IEMgMTMuNzM3ODI3IDguMDQ0MjU2IDEyLjcxNTk1NSA4LjYwMDk2MSAxMS44MDEwNzIgOS4zMDgxMzEgQyAxMC44ODYxOSAxMC4wMTUzMDIgMTAuMDg5OTU5IDEwLjg2MzkyMyA5LjQ0MjQ0MyAxMS44MjE5NTQgQyA4Ljc5NDkyNyAxMi43Nzk5ODUgOC4zMDQzODEgMTMuODM1MjEzIDcuOTg5MzI1IDE0Ljk0Nzc5NSBDIDcuNjc0MjY5IDE2LjA2MDM3NyA3LjUzODcyIDE3LjIxNjEzMiA3LjU4Nzc5NiAxOC4zNzE0MiBDIDcuNjM2ODcyIDE5LjUyNjcwOSA3Ljg2OTk0NyAyMC42NjY4MDUgOC4yNzgyMjIgMjEuNzQ4NjYgQyA4LjY4NjQ5NiAyMi44MzA1MTYgOS4yNjQ3NjUgMjMuODQwMzQxIDkuOTkxMTk1IDI0Ljc0MDAwOCBDIDEwLjcxNzYyNSAyNS42Mzk2NzQgMTEuNTgyOTU2IDI2LjQxNzcxMyAxMi41NTQ1MTQgMjcuMDQ0NzQ5IEMgMTMuNTI2MDczIDI3LjY3MTc4NCAxNC41OTE0NzUgMjguMTM5ODIzIDE1LjcxMDQ5NCAyOC40MzExOTMgQyAxNi44Mjk1MTMgMjguNzIyNTYyIDE3Ljk4Nzg4NCAyOC44MzM1NDkgMTkuMTQxODcxIDI4Ljc1OTk2MyBDIDIwLjI5NTg1NyAyOC42ODYzNzcgMjEuNDMwNzQ5IDI4LjQyOTE1NSAyMi41MDM2OTUgMjcuOTk4MDEgTCAxOC40NSAxNy45MSBMIDI5LjMyMiAxNy45MSB6XCIgc3R5bGU9XCJmaWxsOiNlNjE5NGI7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwicGF0Y2hfM1wiXHUwMDNlICAgIFx1MDAzY3BhdGggZD1cIk0gMjIuNTAzNjk1IDI3Ljk5ODAxIEMgMjQuNTE2OTA2IDI3LjE4OTAzNSAyNi4yNDI1OTcgMjUuNzk1NjM3IDI3LjQ1NzU1NyAyMy45OTgwNDYgQyAyOC42NzI1MTYgMjIuMjAwNDU1IDI5LjMyMiAyMC4wNzk2NjggMjkuMzIyIDE3LjkxIEwgMTguNDUgMTcuOTEgTCAyMi41MDM2OTUgMjcuOTk4MDEgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl9kNGYzOTgyYWM3ZDc0NGZhYTk3M2M2YzkxY2E4YWJlMy5zZXRJY29uKGRpdl9pY29uX2NhZGJjYzBlNDFlNjQ2YTY5MWI5ODM1MDVjMWFlNDgzKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF9iZTczZTFmYWM0ODg0NDEwOWEzNDAyODc1NGI3MzAwNCA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfYzViM2MwYzQ5YjJlNGJjY2FkZmIyNDQ2MTVkNjc1YTIgPSAkKGA8ZGl2IGlkPSJodG1sX2M1YjNjMGM0OWIyZTRiY2NhZGZiMjQ0NjE1ZDY3NWEyIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAzMDxicj4gVm93ZWxzOiA3PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwX2JlNzNlMWZhYzQ4ODQ0MTA5YTM0MDI4NzU0YjczMDA0LnNldENvbnRlbnQoaHRtbF9jNWIzYzBjNDliMmU0YmNjYWRmYjI0NDYxNWQ2NzVhMik7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl9kNGYzOTgyYWM3ZDc0NGZhYTk3M2M2YzkxY2E4YWJlMy5iaW5kUG9wdXAocG9wdXBfYmU3M2UxZmFjNDg4NDQxMDlhMzQwMjg3NTRiNzMwMDQpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfYTZkYjM1YmYyNTM0NDI5YTk2MGMyYzM5MTE3ZTg5MjYgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFstNS4yNjkxOCwgMzUuNDgwOF0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wODAzZGY3NDAzYmM0YjllODYzMTFhZjZhZjQ2ZmIyOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzRmYmQzZDc4ODZlNDRhMDFhMTU2ZWZkMjIwNWVlMTAwID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY21ldGFkYXRhXHUwMDNlICBcdTAwM2NyZGY6UkRGIHhtbG5zOmNjPVwiaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIlx1MDAzZSAgIFx1MDAzY2NjOldvcmtcdTAwM2UgICAgXHUwMDNjZGM6dHlwZSByZGY6cmVzb3VyY2U9XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZVwiL1x1MDAzZSAgICBcdTAwM2NkYzpkYXRlXHUwMDNlMjAyMC0xMS0xNlQxNTowMToyNy45NjQxMzZcdTAwM2MvZGM6ZGF0ZVx1MDAzZSAgICBcdTAwM2NkYzpmb3JtYXRcdTAwM2VpbWFnZS9zdmcreG1sXHUwMDNjL2RjOmZvcm1hdFx1MDAzZSAgICBcdTAwM2NkYzpjcmVhdG9yXHUwMDNlICAgICBcdTAwM2NjYzpBZ2VudFx1MDAzZSAgICAgIFx1MDAzY2RjOnRpdGxlXHUwMDNlTWF0cGxvdGxpYiB2My4zLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvXHUwMDNjL2RjOnRpdGxlXHUwMDNlICAgICBcdTAwM2MvY2M6QWdlbnRcdTAwM2UgICAgXHUwMDNjL2RjOmNyZWF0b3JcdTAwM2UgICBcdTAwM2MvY2M6V29ya1x1MDAzZSAgXHUwMDNjL3JkZjpSREZcdTAwM2UgXHUwMDNjL21ldGFkYXRhXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9XHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjMyMiAxNy45MSBDIDI5LjMyMiAxNi42NjgzMzMgMjkuMTA5Mjg4IDE1LjQzNTc5MyAyOC42OTMxMDkgMTQuMjY1OTUgQyAyOC4yNzY5MyAxMy4wOTYxMDcgMjcuNjYzNDAzIDEyLjAwNjE1OSAyNi44NzkxOTMgMTEuMDQzNDggQyAyNi4wOTQ5ODMgMTAuMDgwODAxIDI1LjE1MTYxOSA5LjI1OTU0MiAyNC4wOTAxMDMgOC42MTUzOTggQyAyMy4wMjg1ODcgNy45NzEyNTQgMjEuODY0NTI0IDcuNTEzNjk2IDIwLjY0ODUwOSA3LjI2MjYwOSBDIDE5LjQzMjQ5NCA3LjAxMTUyMiAxOC4xODI0MDMgNi45NzA1OTggMTYuOTUyNTcgNy4xNDE2MTYgQyAxNS43MjI3MzcgNy4zMTI2MzQgMTQuNTMxMjQxIDcuNjkzMDggMTMuNDI5ODY5IDguMjY2NDE4IEMgMTIuMzI4NDk3IDguODM5NzU3IDExLjMzMzQ0IDkuNTk3NTU4IDEwLjQ4Nzk0NiAxMC41MDY4ODcgQyA5LjY0MjQ1MyAxMS40MTYyMTUgOC45NTg5NTMgMTIuNDYzNzAzIDguNDY3MTU0IDEzLjYwMzgyMSBDIDcuOTc1MzU1IDE0Ljc0Mzk0IDcuNjgyNDg3IDE1Ljk1OTkyOSA3LjYwMTI3OCAxNy4xOTg5MzggQyA3LjUyMDA2OSAxOC40Mzc5NDYgNy42NTE3MTQgMTkuNjgxNzYgNy45OTA0OSAyMC44NzYzMTcgQyA4LjMyOTI2NyAyMi4wNzA4NzUgOC44NzAxOTUgMjMuMTk4NjE1IDkuNTg5NzYzIDI0LjIxMDUyMyBDIDEwLjMwOTMzMiAyNS4yMjI0MzEgMTEuMTk2OTY0IDI2LjEwMzYzMSAxMi4yMTQwNzggMjYuODE1ODIyIEMgMTMuMjMxMTkyIDI3LjUyODAxMiAxNC4zNjI4MzYgMjguMDYwNzI1IDE1LjU1OTgyNiAyOC4zOTA4MDUgQyAxNi43NTY4MTYgMjguNzIwODg2IDE4LjAwMTU1MyAyOC44NDM0ODEgMTkuMjM5OTM5IDI4Ljc1MzI2NCBDIDIwLjQ3ODMyNCAyOC42NjMwNDcgMjEuNjkyMTUxIDI4LjM2MTM0MyAyMi44Mjg2NjMgMjcuODYxMjY2IEMgMjMuOTY1MTc1IDI3LjM2MTE4OSAyNS4wMDc2NjQgMjYuNjcwMDg5IDI1LjkxMDgyIDI1LjgxODAwNSBMIDE4LjQ1IDE3LjkxIEwgMjkuMzIyIDE3LjkxIHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyNS45MTA4MiAyNS44MTgwMDUgQyAyNi45ODgwMSAyNC44MDE3MjkgMjcuODQ2Mjc5IDIzLjU3NTk5MyAyOC40MzI4NDYgMjIuMjE2MTc4IEMgMjkuMDE5NDEzIDIwLjg1NjM2NCAyOS4zMjIgMTkuMzkwOTMgMjkuMzIyIDE3LjkwOTk5OSBMIDE4LjQ1IDE3LjkxIEwgMjUuOTEwODIgMjUuODE4MDA1IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfYTZkYjM1YmYyNTM0NDI5YTk2MGMyYzM5MTE3ZTg5MjYuc2V0SWNvbihkaXZfaWNvbl80ZmJkM2Q3ODg2ZTQ0YTAxYTE1NmVmZDIyMDVlZTEwMCk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODcyNjJiZDM5NDJlNDhiYTg3MmRjYTViM2ZiZTA4ZTUgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzFlN2E2OGU2YTE0MjRmYmZiOTQwZThkOWE0M2U2YmYyID0gJChgPGRpdiBpZD0iaHRtbF8xZTdhNjhlNmExNDI0ZmJmYjk0MGU4ZDlhNDNlNmJmMiIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogNDc8YnI+IFZvd2VsczogNzwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84NzI2MmJkMzk0MmU0OGJhODcyZGNhNWIzZmJlMDhlNS5zZXRDb250ZW50KGh0bWxfMWU3YTY4ZTZhMTQyNGZiZmI5NDBlOGQ5YTQzZTZiZjIpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYTZkYjM1YmYyNTM0NDI5YTk2MGMyYzM5MTE3ZTg5MjYuYmluZFBvcHVwKHBvcHVwXzg3MjYyYmQzOTQyZTQ4YmE4NzJkY2E1YjNmYmUwOGU1KQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2FjMzBhNzRiOTAxZDQyNDhiNWEwZTA5MWI1ODgzMjkyID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNTkuNDQ0NywgLTEzNS4yOV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wODAzZGY3NDAzYmM0YjllODYzMTFhZjZhZjQ2ZmIyOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzNiNTNmZTBmNjZhMDRhZGE4YWI3NWI2YTAwNjM4ZThjID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY21ldGFkYXRhXHUwMDNlICBcdTAwM2NyZGY6UkRGIHhtbG5zOmNjPVwiaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIlx1MDAzZSAgIFx1MDAzY2NjOldvcmtcdTAwM2UgICAgXHUwMDNjZGM6dHlwZSByZGY6cmVzb3VyY2U9XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZVwiL1x1MDAzZSAgICBcdTAwM2NkYzpkYXRlXHUwMDNlMjAyMC0xMS0xNlQxNTowMToyOC4wMTIyNjhcdTAwM2MvZGM6ZGF0ZVx1MDAzZSAgICBcdTAwM2NkYzpmb3JtYXRcdTAwM2VpbWFnZS9zdmcreG1sXHUwMDNjL2RjOmZvcm1hdFx1MDAzZSAgICBcdTAwM2NkYzpjcmVhdG9yXHUwMDNlICAgICBcdTAwM2NjYzpBZ2VudFx1MDAzZSAgICAgIFx1MDAzY2RjOnRpdGxlXHUwMDNlTWF0cGxvdGxpYiB2My4zLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvXHUwMDNjL2RjOnRpdGxlXHUwMDNlICAgICBcdTAwM2MvY2M6QWdlbnRcdTAwM2UgICAgXHUwMDNjL2RjOmNyZWF0b3JcdTAwM2UgICBcdTAwM2MvY2M6V29ya1x1MDAzZSAgXHUwMDNjL3JkZjpSREZcdTAwM2UgXHUwMDNjL21ldGFkYXRhXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9XHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjMyMiAxNy45MSBDIDI5LjMyMiAxNi42MzE4MjQgMjkuMDk2NTk1IDE1LjM2MzYwNiAyOC42NTYxNiAxNC4xNjM3MSBDIDI4LjIxNTcyNCAxMi45NjM4MTUgMjcuNTY3MTE5IDExLjg1MDkzNiAyNi43NDAxOTYgMTAuODc2MjkzIEMgMjUuOTEzMjcyIDkuOTAxNjQ5IDI0LjkyMDkxMyA5LjA4MDQyNSAyMy44MDg3ODkgOC40NTA0MTQgQyAyMi42OTY2NjUgNy44MjA0MDQgMjEuNDgyMTAzIDcuMzkxNDIzIDIwLjIyMSA3LjE4MzIxNCBDIDE4Ljk1OTg5NyA2Ljk3NTAwNSAxNy42NzE5IDYuOTkwODEyIDE2LjQxNjI4NiA3LjIyOTkwNyBDIDE1LjE2MDY3MiA3LjQ2OTAwMiAxMy45NTcwMDMgNy45Mjc2NjEgMTIuODYwNjc1IDguNTg0Nzc0IEMgMTEuNzY0MzQ4IDkuMjQxODg4IDEwLjc5MjQ0MSAxMC4wODcyMTggOS45ODk2ODYgMTEuMDgxODYyIEMgOS4xODY5MyAxMi4wNzY1MDYgOC41NjU4MzIgMTMuMjA0OTY3IDguMTU0OTc2IDE0LjQxNTMwOSBDIDcuNzQ0MTIgMTUuNjI1NjUyIDcuNTQ5OTA3IDE2Ljg5OTAyMSA3LjU4MTI3NCAxOC4xNzY4MTEgQyA3LjYxMjY0MiAxOS40NTQ2MDIgNy44NjkxMDMgMjAuNzE2OTA3IDguMzM4ODUyIDIxLjkwNTYzMiBDIDguODA4NjAyIDIzLjA5NDM1OCA5LjQ4NDMyMyAyNC4xOTA5ODMgMTAuMzM0OTE2IDI1LjE0NTA0IEMgMTEuMTg1NTEgMjYuMDk5MDk2IDEyLjE5NzcyNCAyNi44OTU3MiAxMy4zMjQ5NzQgMjcuNDk4MjQ4IEMgMTQuNDUyMjI0IDI4LjEwMDc3NSAxNS42NzY5NDggMjguNDk5ODIxIDE2Ljk0Mjc4MSAyOC42NzcwMTggQyAxOC4yMDg2MTQgMjguODU0MjE1IDE5LjQ5NTgzNiAyOC44MDY4MDQgMjAuNzQ1MjA0IDI4LjUzNjk2NyBDIDIxLjk5NDU3MiAyOC4yNjcxMjkgMjMuMTg2NjIyIDI3Ljc3OTA2OSAyNC4yNjY0OTMgMjcuMDk1MjQ5IEMgMjUuMzQ2MzY0IDI2LjQxMTQyOCAyNi4yOTcyMzMgMjUuNTQyNSAyNy4wNzUzMzcgMjQuNTI4NDU1IEwgMTguNDUgMTcuOTEgTCAyOS4zMjIgMTcuOTEgelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI3LjA3NTMzNyAyNC41Mjg0NTUgQyAyNy43OTg5MDUgMjMuNTg1NDgzIDI4LjM2Mjk2NCAyMi41MzAyMDQgMjguNzQ1MDI0IDIxLjQwNDY5MSBDIDI5LjEyNzA4NCAyMC4yNzkxNzkgMjkuMzIyIDE5LjA5ODU5MiAyOS4zMjIgMTcuOTEwMDAyIEwgMTguNDUgMTcuOTEgTCAyNy4wNzUzMzcgMjQuNTI4NDU1IHpcIiBzdHlsZT1cImZpbGw6IzE5ZTZiNDtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMVwiL1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJtYXRwbG90bGliLmF4aXNfMlwiL1x1MDAzZSAgXHUwMDNjL2dcdTAwM2UgXHUwMDNjL2dcdTAwM2VcdTAwM2Mvc3ZnXHUwMDNlIn0pOwogICAgICAgICAgICBtYXJrZXJfYWMzMGE3NGI5MDFkNDI0OGI1YTBlMDkxYjU4ODMyOTIuc2V0SWNvbihkaXZfaWNvbl8zYjUzZmUwZjY2YTA0YWRhOGFiNzViNmEwMDYzOGU4Yyk7CiAgICAgICAgCiAgICAKICAgICAgICB2YXIgcG9wdXBfODc1NjJlMWI1YWE2NGVkNWFkOTJhYjA2YjJiYzBjZmQgPSBMLnBvcHVwKHsibWF4V2lkdGgiOiAiMTAwJSJ9KTsKCiAgICAgICAgCiAgICAgICAgICAgIHZhciBodG1sXzRhM2FkYmFjNTMxNzQ3ODU4NmMwMGRkMTdkZDhmYmYzID0gJChgPGRpdiBpZD0iaHRtbF80YTNhZGJhYzUzMTc0Nzg1ODZjMDBkZDE3ZGQ4ZmJmMyIgc3R5bGU9IndpZHRoOiAxMDAuMCU7IGhlaWdodDogMTAwLjAlOyI+Q29uc29uYW50czogNDM8YnI+IFZvd2VsczogNTwvZGl2PmApWzBdOwogICAgICAgICAgICBwb3B1cF84NzU2MmUxYjVhYTY0ZWQ1YWQ5MmFiMDZiMmJjMGNmZC5zZXRDb250ZW50KGh0bWxfNGEzYWRiYWM1MzE3NDc4NTg2YzAwZGQxN2RkOGZiZjMpOwogICAgICAgIAoKICAgICAgICBtYXJrZXJfYWMzMGE3NGI5MDFkNDI0OGI1YTBlMDkxYjU4ODMyOTIuYmluZFBvcHVwKHBvcHVwXzg3NTYyZTFiNWFhNjRlZDVhZDkyYWIwNmIyYmMwY2ZkKQogICAgICAgIDsKCiAgICAgICAgCiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyXzMxYzcyMTQ5NDhkNDQwMDc5N2QzMWFmM2E5OWQ4OTNiID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDYuMzY5OSwgLTEwMy45NV0sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wODAzZGY3NDAzYmM0YjllODYzMTFhZjZhZjQ2ZmIyOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzgwMDkxZWI3ZWI0ZTRhZTBiYzg2NGU5MjMwNTVkZWEzID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY21ldGFkYXRhXHUwMDNlICBcdTAwM2NyZGY6UkRGIHhtbG5zOmNjPVwiaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIlx1MDAzZSAgIFx1MDAzY2NjOldvcmtcdTAwM2UgICAgXHUwMDNjZGM6dHlwZSByZGY6cmVzb3VyY2U9XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZVwiL1x1MDAzZSAgICBcdTAwM2NkYzpkYXRlXHUwMDNlMjAyMC0xMS0xNlQxNTowMToyOC4wNTE0NDdcdTAwM2MvZGM6ZGF0ZVx1MDAzZSAgICBcdTAwM2NkYzpmb3JtYXRcdTAwM2VpbWFnZS9zdmcreG1sXHUwMDNjL2RjOmZvcm1hdFx1MDAzZSAgICBcdTAwM2NkYzpjcmVhdG9yXHUwMDNlICAgICBcdTAwM2NjYzpBZ2VudFx1MDAzZSAgICAgIFx1MDAzY2RjOnRpdGxlXHUwMDNlTWF0cGxvdGxpYiB2My4zLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvXHUwMDNjL2RjOnRpdGxlXHUwMDNlICAgICBcdTAwM2MvY2M6QWdlbnRcdTAwM2UgICAgXHUwMDNjL2RjOmNyZWF0b3JcdTAwM2UgICBcdTAwM2MvY2M6V29ya1x1MDAzZSAgXHUwMDNjL3JkZjpSREZcdTAwM2UgXHUwMDNjL21ldGFkYXRhXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9XHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjMyMiAxNy45MSBDIDI5LjMyMiAxNi44MDA5NjUgMjkuMTUyMzA0IDE1LjY5ODQzMiAyOC44MTg4MTEgMTQuNjQwNzI2IEMgMjguNDg1MzE4IDEzLjU4MzAyMSAyNy45OTE5MzcgMTIuNTgyNTQ1IDI3LjM1NTgyMSAxMS42NzQwNzcgQyAyNi43MTk3MDUgMTAuNzY1NjA5IDI1Ljk0ODMxIDkuOTU5OCAyNS4wNjg0NTQgOS4yODQ2NjIgQyAyNC4xODg1OTggOC42MDk1MjUgMjMuMjEwNTk0IDguMDcyOTc0IDIyLjE2ODQ0MyA3LjY5MzY2MiBDIDIxLjEyNjI5MSA3LjMxNDM1IDIwLjAzMjIwOSA3LjA5NjcyMyAxOC45MjQyMyA3LjA0ODM0OCBDIDE3LjgxNjI1MSA2Ljk5OTk3MiAxNi43MDczNjQgNy4xMjE0MTUgMTUuNjM2MTE5IDcuNDA4NDU1IEMgMTQuNTY0ODc0IDcuNjk1NDk0IDEzLjU0MzgyOSA4LjE0NDc2NCAxMi42MDg0NzggOC43NDA2NDggQyAxMS42NzMxMjggOS4zMzY1MzIgMTAuODM0NDM4IDEwLjA3MjA0NCAxMC4xMjE1NjUgMTAuOTIxNjEzIEMgOS40MDg2OTEgMTEuNzcxMTgzIDguODI5OTkxIDEyLjcyNDg1MiA4LjQwNTU4MiAxMy43NDk0NjYgQyA3Ljk4MTE3MiAxNC43NzQwODEgNy43MTYwMyAxNS44NTc2MjkgNy42MTkzNzEgMTYuOTYyNDQzIEMgNy41MjI3MTMgMTguMDY3MjU4IDcuNTk1NjcxIDE5LjE4MDM4NiA3LjgzNTcxIDIwLjI2MzEzMiBDIDguMDc1NzQ5IDIxLjM0NTg3OCA4LjQ4MDA1NSAyMi4zODU1NDggOS4wMzQ1NzIgMjMuMzQ2MDAxIEMgOS41ODkwOSAyNC4zMDY0NTMgMTAuMjg3MzE4IDI1LjE3NjQyNyAxMS4xMDQ5ODQgMjUuOTI1NjggQyAxMS45MjI2NSAyNi42NzQ5MzMgMTIuODUwMTY4IDI3LjI5NDY4IDEzLjg1NTI5NSAyNy43NjMzNzkgQyAxNC44NjA0MjIgMjguMjMyMDc3IDE1LjkzMTM3MyAyOC41NDQyMzEgMTcuMDMwOTIgMjguNjg4OTg5IEMgMTguMTMwNDY3IDI4LjgzMzc0NyAxOS4yNDU3MTggMjguODA5NDEyIDIwLjMzNzkwNCAyOC42MTY4MyBMIDE4LjQ1IDE3LjkxIEwgMjkuMzIyIDE3LjkxIHpcIiBzdHlsZT1cImZpbGw6I2U2MTk0YjtcIi9cdTAwM2UgICBcdTAwM2MvZ1x1MDAzZSAgIFx1MDAzY2cgaWQ9XCJwYXRjaF8zXCJcdTAwM2UgICAgXHUwMDNjcGF0aCBkPVwiTSAyMC4zMzc5MDQgMjguNjE2ODMgQyAyMi44NTQ1MDkgMjguMTczMDg0IDI1LjEzNTgzOSAyNi44NTU5NTggMjYuNzc4NDM2IDI0Ljg5ODM4NiBDIDI4LjQyMTAzMyAyMi45NDA4MTUgMjkuMzIyIDIwLjQ2NTQyNyAyOS4zMjIgMTcuOTA5OTk5IEwgMTguNDUgMTcuOTEgTCAyMC4zMzc5MDQgMjguNjE2ODMgelwiIHN0eWxlPVwiZmlsbDojMTllNmI0O1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18xXCIvXHUwMDNlICAgXHUwMDNjZyBpZD1cIm1hdHBsb3RsaWIuYXhpc18yXCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSBcdTAwM2MvZ1x1MDAzZVx1MDAzYy9zdmdcdTAwM2UifSk7CiAgICAgICAgICAgIG1hcmtlcl8zMWM3MjE0OTQ4ZDQ0MDA3OTdkMzFhZjNhOTlkODkzYi5zZXRJY29uKGRpdl9pY29uXzgwMDkxZWI3ZWI0ZTRhZTBiYzg2NGU5MjMwNTVkZWEzKTsKICAgICAgICAKICAgIAogICAgICAgIHZhciBwb3B1cF8wNWE3OWY3YjNhODE0OTY1YTJiN2ViYjcxZDQyZDQzNSA9IEwucG9wdXAoeyJtYXhXaWR0aCI6ICIxMDAlIn0pOwoKICAgICAgICAKICAgICAgICAgICAgdmFyIGh0bWxfN2I0ZDgyNWEwMTg0NDM0MGEwYWE0ZThlYTg2N2VhMWUgPSAkKGA8ZGl2IGlkPSJodG1sXzdiNGQ4MjVhMDE4NDQzNDBhMGFhNGU4ZWE4NjdlYTFlIiBzdHlsZT0id2lkdGg6IDEwMC4wJTsgaGVpZ2h0OiAxMDAuMCU7Ij5Db25zb25hbnRzOiAyODxicj4gVm93ZWxzOiA4PC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzA1YTc5ZjdiM2E4MTQ5NjVhMmI3ZWJiNzFkNDJkNDM1LnNldENvbnRlbnQoaHRtbF83YjRkODI1YTAxODQ0MzQwYTBhYTRlOGVhODY3ZWExZSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8zMWM3MjE0OTQ4ZDQ0MDA3OTdkMzFhZjNhOTlkODkzYi5iaW5kUG9wdXAocG9wdXBfMDVhNzlmN2IzYTgxNDk2NWEyYjdlYmI3MWQ0MmQ0MzUpCiAgICAgICAgOwoKICAgICAgICAKICAgIAogICAgCiAgICAgICAgICAgIHZhciBtYXJrZXJfMTUwMWIzMDc4NWZiNDlkMGE2ZTY5MGNlZjgwNWU5ODQgPSBMLm1hcmtlcigKICAgICAgICAgICAgICAgIFsxOC43NzU3LCAtODguOTU2N10sCiAgICAgICAgICAgICAgICB7fQogICAgICAgICAgICApLmFkZFRvKG1hcF8wODAzZGY3NDAzYmM0YjllODYzMTFhZjZhZjQ2ZmIyOSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIGRpdl9pY29uXzczMjQ1NDJmNzk3ODQ5M2NiNGFhNTQyNmI2ZGQ5ZDZhID0gTC5kaXZJY29uKHsiY2xhc3NOYW1lIjogImVtcHR5IiwgImh0bWwiOiAiXHUwMDNjP3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiIHN0YW5kYWxvbmU9XCJub1wiP1x1MDAzZVx1MDAzYyFET0NUWVBFIHN2ZyBQVUJMSUMgXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlwiICBcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFwiXHUwMDNlXHUwMDNjIS0tIENyZWF0ZWQgd2l0aCBtYXRwbG90bGliIChodHRwczovL21hdHBsb3RsaWIub3JnLykgLS1cdTAwM2VcdTAwM2NzdmcgaGVpZ2h0PVwiMzZwdFwiIHZlcnNpb249XCIxLjFcIiB2aWV3Qm94PVwiMCAwIDM2IDM2XCIgd2lkdGg9XCIzNnB0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXHUwMDNlIFx1MDAzY21ldGFkYXRhXHUwMDNlICBcdTAwM2NyZGY6UkRGIHhtbG5zOmNjPVwiaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjXCIgeG1sbnM6ZGM9XCJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xL1wiIHhtbG5zOnJkZj1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyNcIlx1MDAzZSAgIFx1MDAzY2NjOldvcmtcdTAwM2UgICAgXHUwMDNjZGM6dHlwZSByZGY6cmVzb3VyY2U9XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZVwiL1x1MDAzZSAgICBcdTAwM2NkYzpkYXRlXHUwMDNlMjAyMC0xMS0xNlQxNTowMToyOC4xMDEzNzBcdTAwM2MvZGM6ZGF0ZVx1MDAzZSAgICBcdTAwM2NkYzpmb3JtYXRcdTAwM2VpbWFnZS9zdmcreG1sXHUwMDNjL2RjOmZvcm1hdFx1MDAzZSAgICBcdTAwM2NkYzpjcmVhdG9yXHUwMDNlICAgICBcdTAwM2NjYzpBZ2VudFx1MDAzZSAgICAgIFx1MDAzY2RjOnRpdGxlXHUwMDNlTWF0cGxvdGxpYiB2My4zLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvXHUwMDNjL2RjOnRpdGxlXHUwMDNlICAgICBcdTAwM2MvY2M6QWdlbnRcdTAwM2UgICAgXHUwMDNjL2RjOmNyZWF0b3JcdTAwM2UgICBcdTAwM2MvY2M6V29ya1x1MDAzZSAgXHUwMDNjL3JkZjpSREZcdTAwM2UgXHUwMDNjL21ldGFkYXRhXHUwMDNlIFx1MDAzY2RlZnNcdTAwM2UgIFx1MDAzY3N0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiXHUwMDNlKntzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjpyb3VuZDt9XHUwMDNjL3N0eWxlXHUwMDNlIFx1MDAzYy9kZWZzXHUwMDNlIFx1MDAzY2cgaWQ9XCJmaWd1cmVfMVwiXHUwMDNlICBcdTAwM2NnIGlkPVwicGF0Y2hfMVwiXHUwMDNlICAgXHUwMDNjcGF0aCBkPVwiTSAwIDM2IEwgMzYgMzYgTCAzNiAwIEwgMCAwIHpcIiBzdHlsZT1cImZpbGw6bm9uZTtvcGFjaXR5OjA7XCIvXHUwMDNlICBcdTAwM2MvZ1x1MDAzZSAgXHUwMDNjZyBpZD1cImF4ZXNfMVwiXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzJcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDI5LjMyMiAxNy45MSBDIDI5LjMyMiAxNi4wMDE3MDcgMjguODE5NTc0IDE0LjEyNjYzIDI3Ljg2NTQyOCAxMi40NzQgQyAyNi45MTEyODIgMTAuODIxMzcgMjUuNTM4NjMgOS40NDg3MTggMjMuODg2IDguNDk0NTcyIEMgMjIuMjMzMzcgNy41NDA0MjUgMjAuMzU4MjkyIDcuMDM4IDE4LjQ0OTk5OSA3LjAzOCBDIDE2LjU0MTcwNyA3LjAzOCAxNC42NjY2MjkgNy41NDA0MjYgMTMuMDEzOTk5IDguNDk0NTcyIEMgMTEuMzYxMzcgOS40NDg3MTkgOS45ODg3MTggMTAuODIxMzcxIDkuMDM0NTcxIDEyLjQ3NDAwMSBDIDguMDgwNDI1IDE0LjEyNjYzMSA3LjU3OCAxNi4wMDE3MDggNy41NzggMTcuOTEwMDAxIEMgNy41NzggMTkuODE4Mjk0IDguMDgwNDI2IDIxLjY5MzM3MSA5LjAzNDU3MiAyMy4zNDYwMDEgQyA5Ljk4ODcxOSAyNC45OTg2MzEgMTEuMzYxMzcxIDI2LjM3MTI4MyAxMy4wMTQwMDEgMjcuMzI1NDI5IEwgMTguNDUgMTcuOTEgTCAyOS4zMjIgMTcuOTEgelwiIHN0eWxlPVwiZmlsbDojZTYxOTRiO1wiL1x1MDAzZSAgIFx1MDAzYy9nXHUwMDNlICAgXHUwMDNjZyBpZD1cInBhdGNoXzNcIlx1MDAzZSAgICBcdTAwM2NwYXRoIGQ9XCJNIDEzLjAxNDAwMSAyNy4zMjU0MjkgQyAxNC42NjY2MzEgMjguMjc5NTc1IDE2LjU0MTcwOSAyOC43ODIgMTguNDUwMDAyIDI4Ljc4MiBDIDIwLjM1ODI5NCAyOC43ODIgMjIuMjMzMzcyIDI4LjI3OTU3NCAyMy44ODYwMDEgMjcuMzI1NDI3IEMgMjUuNTM4NjMxIDI2LjM3MTI4MSAyNi45MTEyODMgMjQuOTk4NjI4IDI3Ljg2NTQyOSAyMy4zNDU5OTggQyAyOC44MTk1NzUgMjEuNjkzMzY4IDI5LjMyMiAxOS44MTgyOTEgMjkuMzIyIDE3LjkwOTk5OCBMIDE4LjQ1IDE3LjkxIEwgMTMuMDE0MDAxIDI3LjMyNTQyOSB6XCIgc3R5bGU9XCJmaWxsOiMxOWU2YjQ7XCIvXHUwMDNlICAgXHUwMDNjL2dcdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzFcIi9cdTAwM2UgICBcdTAwM2NnIGlkPVwibWF0cGxvdGxpYi5heGlzXzJcIi9cdTAwM2UgIFx1MDAzYy9nXHUwMDNlIFx1MDAzYy9nXHUwMDNlXHUwMDNjL3N2Z1x1MDAzZSJ9KTsKICAgICAgICAgICAgbWFya2VyXzE1MDFiMzA3ODVmYjQ5ZDBhNmU2OTBjZWY4MDVlOTg0LnNldEljb24oZGl2X2ljb25fNzMyNDU0MmY3OTc4NDkzY2I0YWE1NDI2YjZkZDlkNmEpOwogICAgICAgIAogICAgCiAgICAgICAgdmFyIHBvcHVwXzgwYTI4NzY5ZmJiOTQ2NjFiNWFhOTVjNjc3ZjVlNjgxID0gTC5wb3B1cCh7Im1heFdpZHRoIjogIjEwMCUifSk7CgogICAgICAgIAogICAgICAgICAgICB2YXIgaHRtbF9lNDg3NDQ1YTE4ZDE0MDZkYTAyODI3NTI4YzcyNzZiNSA9ICQoYDxkaXYgaWQ9Imh0bWxfZTQ4NzQ0NWExOGQxNDA2ZGEwMjgyNzUyOGM3Mjc2YjUiIHN0eWxlPSJ3aWR0aDogMTAwLjAlOyBoZWlnaHQ6IDEwMC4wJTsiPkNvbnNvbmFudHM6IDIwPGJyPiBWb3dlbHM6IDEwPC9kaXY+YClbMF07CiAgICAgICAgICAgIHBvcHVwXzgwYTI4NzY5ZmJiOTQ2NjFiNWFhOTVjNjc3ZjVlNjgxLnNldENvbnRlbnQoaHRtbF9lNDg3NDQ1YTE4ZDE0MDZkYTAyODI3NTI4YzcyNzZiNSk7CiAgICAgICAgCgogICAgICAgIG1hcmtlcl8xNTAxYjMwNzg1ZmI0OWQwYTZlNjkwY2VmODA1ZTk4NC5iaW5kUG9wdXAocG9wdXBfODBhMjg3NjlmYmI5NDY2MWI1YWE5NWM2NzdmNWU2ODEpCiAgICAgICAgOwoKICAgICAgICAKICAgIAo8L3NjcmlwdD4= onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
      ],
      "text/plain": [
       "<folium.folium.Map at 0x7faf544a2a60>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import folium\n",
    "\n",
    "\n",
    "m = folium.Map(location=(0, 0), zoom_start=2)\n",
    "\n",
    "for i, coord in enumerate(data.coordinates):\n",
    "    marker = folium.Marker(coord)\n",
    "    icon = folium.DivIcon(html=plots[i])\n",
    "    marker.add_child(icon)\n",
    "    popup = folium.Popup(\n",
    "        \"Consonants: {}<br>\\nVowels: {}\".format(data.consonants[i], data.vowels[i])\n",
    "    )\n",
    "    marker.add_child(popup)\n",
    "    m.add_child(marker)\n",
    "m.get_root().add_child(legend)\n",
    "m"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
